Ver Mensaje Individual
  #5 (permalink)  
Antiguo 14/05/2013, 22:39
geihidfon
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: procedimiento almacenado para listar

Hola felipelvrd, Te dejo un ejemlo de como debe quedar tu listar el mismo se realizad usando tipos, colecciones y cursores al final devuelve una colección. Tal vez te de una idea.
Código SQL:
Ver original
  1. PROCEDURE P_Listar(
  2.             pv_num_empresa          IN  sgm00tm_det_empresas_usuario.num_empresa%TYPE,
  3.             pv_cod_tipo_presupuesto IN  varchar2,
  4.             pv_des_tipo_presupuesto IN  sgm00tt_sacp_tip_presupuesto_v.des_tipo_presupuesto%TYPE,
  5.             pv_num_pagina           IN  NUMBER,
  6.             pv_reg_presentar        IN  NUMBER,
  7.             pv_accion               IN  NUMBER,
  8.             po_mensaje              OUT varchar2,
  9.             po_arreglo              OUT DM_T_PRESUPUESTO,
  10.             po_total_registros  OUT  NUMBER)
  11. IS
  12.    
  13.     v_tabla        DM_T_PRESUPUESTO := DM_T_PRESUPUESTO(); --esto es una coleccion en oracle la cual debe estar previamente deficina con los campos a mostrar
  14.     v_registro     DM_PRESUPUESTO := DM_PRESUPUESTO(NULL,NULL);
  15.    
  16.     v_Linea        BINARY_INTEGER := 0;
  17.     TYPE CUR_TYP IS REF CURSOR;
  18.     cur_registros  CUR_TYP;
  19.     v_query        VARCHAR2(24000);
  20.  
  21.    v_query :=
  22.             'SELECT * FROM ( SELECT a.*, rownum rnum FROM (
  23.                select  to_char(cod_tipo_presupuesto) as cod_tipo_presupuesto, des_tipo_presupuesto
  24.                from    sgm00tt_sacp_tip_presupuesto_v
  25.                where   nvl(:pv_cod_tipo_presupuesto, cod_tipo_presupuesto) = cod_tipo_presupuesto
  26.                and     upper(nvl(des_tipo_presupuesto, ''|-*-|'')) like ''%''||upper(nvl(:pv_des_tipo_presupuesto, nvl(des_tipo_presupuesto, ''|-*-|'')))||''%''          
  27.            ) a WHERE rownum <= :Final ) WHERE rnum >= :Inicio';
  28.            
  29.     OPEN cur_registros FOR v_query USING
  30.             pv_cod_tipo_presupuesto, pv_des_tipo_presupuesto,
  31.             100000, 1;
  32.            
  33.     LOOP
  34.       FETCH cur_registros INTO
  35.            v_registro.cod_tipo_presupuesto,
  36.            v_registro.des_tipo_presupuesto,
  37.            v_lineas;
  38.     IF (cur_registros%FOUND) THEN
  39.                v_linea := v_linea + 1;
  40.                v_tabla.EXTEND;
  41.                v_tabla(v_linea) := v_registro;
  42.     ELSE
  43.        EXIT;
  44.     END IF;
  45.    
  46.      CLOSE cur_registros;
  47.      po_arreglo := v_tabla;
  48.      
  49.      EXCEPTION
  50.      WHEN OTHERS THEN
  51.           po_mensaje := nvl(f_mensaje_error(pv_num_empresa,substr(sqlcode,2,10)),'Ocurrió un Error a la hora de Consultar: '||sqlerrm);
  52. END P_Listar;

Última edición por gnzsoloyo; 15/05/2013 a las 03:10