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

Retornar Datos de procedimiento select

Estas en el tema de Retornar Datos de procedimiento select en el foro de Oracle en Foros del Web. ¿Como puedo retornar datos de una consulta select con un store procedure en oracle? Este es un ejemplo del tipo de procedimiento que quisiera poder ...
  #1 (permalink)  
Antiguo 11/02/2010, 13:25
 
Fecha de Ingreso: febrero-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Retornar Datos de procedimiento select

¿Como puedo retornar datos de una consulta select con un store procedure en oracle?
Este es un ejemplo del tipo de procedimiento que quisiera poder hacer con oracle, soy novato con oracle y lo que quiero es retornar varias filas, alguien podria ayudarme
--------------------------------------…
CREATE OR REPLACE PROCEDURE FINANZAS.CLIENTE_CUENTA (
ID_CLIENTE IN NUMBER,
RAZON_SOCIAL OUT VARCHAR2,
CODIGO_CUENTA OUT VARCHAR2
DEBE OUT NUMBER,
HABER OUT NUMBER
)
AS
cursor CUENTA_CLI IS (SELECT
FINANZAS.CLIENTE.RAZON_SOCIAL,
FINANZAS.CLIENTE_CTA.CODIGO_CUENTA,
FINANZAS.CLIENTE_CTA.DEBE,
FINANZAS.CLIENTE_CTA.HABER

FROM
FINANZAS.CLIENTE
INNER JOIN FINANZAS.CLIENTE_CTA ON (FINANZAS.CLIENTE.ID_CLIENTE=FINANZAS.CL…
WHERE
(FINANZAS.CLIENTE.ID_CLIENTE = ID_CLIENTE));



BEGIN

OPEN CUENTA_CLI;

FETCH CUENTA_CLI into RAZON_SOCIAL, CODIGO_CUENTA, DEBE, HABER ;

WHILE CUENTA_CLI%FOUND LOOP

FETCH CUENTA_CLI into RAZON_SOCIAL, CODIGO_CUENTA, DEBE, HABER ;

RETURN;

END LOOP;


close CUENTA_CLI;

END;
----------------------
  #2 (permalink)  
Antiguo 12/02/2010, 07:12
 
Fecha de Ingreso: abril-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: Retornar Datos de procedimiento select

Despues del fetch puedes puedes poner un

dbms_output.put_line('esto es lo que se visualiza literal '||nombre de la variable);
  #3 (permalink)  
Antiguo 12/02/2010, 11:01
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Retornar Datos de procedimiento select

De todas maneras lo tienes mal.

Primero, el fetch metelo dentro del loop, no fuera.
Un fetch te sobra.
El return no tiene ningun sentido.

Lo que tienes que hacer es usar una tabla PL y retornar esa tabla pl. Busca informacion sobre los TIPO RECORD.
  #4 (permalink)  
Antiguo 17/02/2010, 08:44
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Retornar Datos de procedimiento select

Primero declara los valores tipo tabla ejm:

Código:
TYPE tstring IS TABLE OF VARCHAR2(30)
             INDEX BY BINARY_INTEGER;
      
TYPE tnumbers IS TABLE OF NUMBER
              INDEX BY BINARY_INTEGER;
Luego tu procedimiento podria ser algo asi:


Código:
PROCEDURE Retornar_varias_filas (Campo1 OUT tstring,               
                                                       Campo2 OUT tstring,
                                                       Campo3 OUT tstring, 
                                                       Status OUT tnumbers
                                                       )

IS 

      -- Cursor
      CURSOR crs IS
      SELECT campo1, campo2, campo3
      FROM tabla;
      
      c NUMBER DEFAULT 1; -- Contador

BEGIN

      FOR single IN crs  LOOP
       
          Campo1(c):= single.campo1;    
          Campo2(c):= single.campo2;   
          Campo3(c):= single.campo3;     
          
         
          c := c + 1;
       
      END LOOP;
            
      IF (c = 1) THEN  -- Si al finalizar el loop la variable c es 1, no existen datos
      
          Status (1) := 1;
      
      ELSE -- Existe al menos un Retorno
      
          Status (1) := 0;
      
      END IF;



END;

Asi puedes retornar varias filas, una sola o lo que quieras. Recuerda declarar los tipo tabla

Saludos.

Etiquetas: procedimiento, select
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 11:59.