salida retornar procedimientos procedimiento parametros funciones entrada ejecutar developer con almacenado oracle plsql cursor ref

oracle - retornar - PL/SQL imprime el cursor de ref devuelto por un procedimiento almacenado



procedimientos y funciones oracle pl/sql (3)

Nota: Este código no ha sido probado

Defina un registro para su tipo de retorno refCursor, llámelo rec. Por ejemplo:

TYPE MyRec IS RECORD (col1 VARCHAR2(10), col2 VARCHAR2(20), ...); --define the record rec MyRec; -- instantiate the record

Una vez que haya devuelto el refcursor de su procedimiento, puede agregar el siguiente código donde se encuentran sus comentarios ahora:

LOOP FETCH refCursor INTO rec; EXIT WHEN refCursor%NOTFOUND; dbms_output.put_line(rec.col1||'',''||rec.col2||'',''||...); END LOOP;

¿Cómo puedo recuperar desde un cursor de referencia que se devuelve desde un procedimiento almacenado (variable OUT) e imprimir las filas resultantes a STDOUT en SQL * PLUS?

Procedimiento almacenado ORACLE:

PROCEDURE GetGrantListByPI(p_firstname IN VARCHAR2, p_lastname IN VARCHAR2, p_orderby IN VARCHAR2, p_cursor OUT grantcur);

PL / SQL:

SET SERVEROUTPUT ON; DECLARE TYPE r_cursor IS REF CURSOR; refCursor r_cursor; CURSOR grantCursor IS SELECT last_name, first_name FROM ten_year_pis WHERE year_added = 2010; last_name VARCHAR2(100); first_name VARCHAR2(100); BEGIN OPEN grantCursor; FETCH grantCursor INTO last_name, first_name; WHILE grantCursor%FOUND LOOP PMAWEB_PKG.GetGrantListByPI(last_name, first_name, ''last_name'', refCursor); --HOW DO I LOOP THROUGH THE RETURNED REF CURSOR (refCursor) --AND PRINT THE RESULTING ROWS TO STDOUT? FETCH grantCursor into last_name, first_name; END LOOP; CLOSE grantCursor; END; /


Puede usar una variable de vinculación en el nivel SQLPlus para hacer esto. Por supuesto, tiene poco control sobre el formato de la salida.

VAR x REFCURSOR; EXEC GetGrantListByPI(args, :x); PRINT :x;


Si desea imprimir todas las columnas en su cláusula de selección, puede ir con el comando de autoimpresión.

CREATE OR REPLACE PROCEDURE sps_detail_dtest(v_refcur OUT sys_refcursor) AS BEGIN OPEN v_refcur FOR ''select * from dummy_table''; END; SET autoprint on; --calling the procedure VAR vcur refcursor; DECLARE BEGIN sps_detail_dtest(vrefcur=>:vcur); END;

Espero que esto te brinde una solución alternativa