Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

retornar varias filas en un package

Estas en el tema de retornar varias filas en un package en el foro de Oracle en Foros del Web. buen dia, tengo definido el siguiente package @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE OR REPLACE PACKAGE pk_filas   IS       TYPE numero ...
  #1 (permalink)  
Antiguo 14/01/2013, 10:44
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 3 meses
Puntos: 0
retornar varias filas en un package

buen dia, tengo definido el siguiente package

Código SQL:
Ver original
  1. CREATE OR REPLACE PACKAGE pk_filas
  2.  
  3. IS
  4.  
  5.    TYPE numero IS record
  6.    (
  7.         CUENTA VARCHAR2(12)
  8.    );
  9.    
  10.    TYPE t_numero_cuentas IS TABLE OF numero;
  11.  
  12.    FUNCTION fu_retorna_id(cedula VARCHAR2, prueba varchar2) RETURN numero;
  13.  
  14. END;
  15. /


Código SQL:
Ver original
  1. CREATE OR REPLACE PACKAGE BODY pk_filas IS
  2.  
  3. FUNCTION fu_retorna_id(cedula VARCHAR2, prueba varchar2) RETURN numero IS
  4.    
  5.        
  6.    CURSOR c_prueba(p_cedula VARCHAR2, p_prueba varchar2) IS      
  7.        
  8.         SELECT  cuenta
  9.         FROM tabla1 t1, tabla2 t2
  10.         WHERE t1.cc= p_cedula
  11.         AND t2_kk=t1.kk
  12.         AND t1.es='1'
  13.         AND t2.clase=p_prueba;
  14.  
  15.       BEGIN
  16.        FOR r_c_t2 IN c_prueba(p_cedula,p_prueba) LOOP
  17.          numero:=r_c_t2.cuenta;
  18.                END LOOP;
  19.      RETURN numero;
  20.    END;
  21.  
  22. END;
  23. /
pero al compliarlo siempre sale el error package body pk_filas on line 21 pls-00330: invalid use of type name or subtype name......

no encuentro cual es el error a ver si me ayudan....

Última edición por gnzsoloyo; 23/01/2013 a las 10:35 Razón: Etiqueta incorrecta. Usar Highlight "SQL"
  #2 (permalink)  
Antiguo 14/01/2013, 12:00
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: retornar varias filas en un package

A ver, así a bote pronto ( tendría que probarlo en el curro ), veo dos fallos, uno el el PACKAGE y otro en el PACKAGE BODY.

En el package prueba esto :

Código SQL:
Ver original
  1. CREATE OR REPLACE PACKAGE pk_filas
  2.  
  3. IS
  4.  
  5.    TYPE numero IS record
  6.    (
  7.         CUENTA VARCHAR2(12)
  8.    );
  9.    
  10.    TYPE t_numero_cuentas IS TABLE OF numero;
  11.  
  12. var_t_numero t_numero_cuentas;
  13.  
  14.    FUNCTION fu_retorna_id(cedula VARCHAR2, prueba varchar2) RETURN numero;
  15.  
  16. END;
  17. /

Y en el body, prueba esto otro :

Código SQL:
Ver original
  1. CREATE OR REPLACE PACKAGE BODY pk_filas IS
  2.  
  3. FUNCTION fu_retorna_id(cedula VARCHAR2, prueba varchar2) RETURN numero IS
  4.    
  5. indice_tabla_pl NUMBER := 0;
  6.        
  7.    CURSOR c_prueba(p_cedula VARCHAR2, p_prueba varchar2) IS      
  8.        
  9.         SELECT  cuenta
  10.         FROM tabla1 t1, tabla2 t2
  11.         WHERE t1.cc= p_cedula
  12.         AND t2_kk=t1.kk
  13.         AND t1.es='1'
  14.         AND t2.clase=p_prueba;
  15.  
  16.       BEGIN
  17.        FOR r_c_t2 IN c_prueba(p_cedula,p_prueba) LOOP
  18.  
  19. indice_tabla_pl := indice_tabla_pl +1 ;
  20.  
  21. var_t_numero(indice_tabla_pl) := r_c_t2.cuenta;
  22.  
  23. END LOOP;
  24.  
  25. RETURN (var_t_numero);
  26.    END;
  27.  
  28. END;
  29. /

SI no te rula, dimelo y lo pruebo en el curro, pero creo que así te va a rular.
  #3 (permalink)  
Antiguo 14/01/2013, 12:15
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: retornar varias filas en un package

hola, hice las correcciones y ahora me dice que

PACKAGE BODY pk_filas
On line: 17
PLS-00382: expression is of wrong type
  #4 (permalink)  
Antiguo 14/01/2013, 12:26
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: retornar varias filas en un package

Vale, pues mañana lo miro en el curro y te digo algo.
  #5 (permalink)  
Antiguo 22/01/2013, 18:23
 
Fecha de Ingreso: enero-2009
Mensajes: 32
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: retornar varias filas en un package

Hola compañero,

estás definiendo un tipo de datos registro (numero) y luego una tabla de números. En la definición de la tabla, te faltaría indicar INDEX BY BYNARY_INTEGER por ejemplo.

Luego en la función del cuerpo del paquete, no puedes utilizar numero como si de una variable se tratara ya que es un tipo de datos, tendrás que declarar una variable local a la función de tipo numero para utilizarla dentro del bucle.

Además, donde haces numero:=r_c_t2.cuenta; deberías hacer v_numero.cuenta := r_c_t2.cuenta ; teniendo en cuenta que habrás declarado v_numero numero ;. Ten en cuenta, que el tipo numero es un record y por tanto, o asignas un record del mismo tipo o especificas la propiedad del registro a la que asignas.

Puedes echar un vistazo a este ejemplo en el cual se trata con registros y tablas pl/sql http://notasprogramacion.sodenet.es/como-recorrer-array-oracle-plsql .

Un saludo
__________________
Anotaciones de un programador

Etiquetas: filas, package, retornar, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:14.