2011-12-22 248 views
10

Duplicar posible:
Best way/tool to get the results from an oracle package procedure
Oracle SQL Developer: Show REFCURSOR Results in Grid?¿Cómo ver el resultado/resultado del refcursor en Oracle SQL Developer?

Soy nuevo en Oracle SQL Developer. Estoy usando Oracle SQL Developer Version 3.0. Estaba tratando de probar mi SP utilizando la siguiente consulta.

DECLARE 
    type output_cursor is ref cursor; 
    P_CURSOR output_cursor; 
BEGIN 
    P_CURSOR := NULL; 
    myPackage.mySPTest ( P_NOTIFICATION_ID => 1975357,P_CURSOR => P_CURSOR) ; 
END; 

Cuando me encontré con la consulta anterior en mi Oracle SQL Developer, estoy consiguiendo un 'bloque de Anonymus completado' y su mensaje no se muestra ningún resultado.

¿Alguien me puede ayudar, cómo ver el resultado.

.

+0

¿qué salida esperas? ¿A dónde van los 'resultados' de tu sp? es probable que desee escribir una instrucción SELECT contra eso ... – Randy

+0

Esperando un conjunto de resultados de filas y columnas. Los resultados de SP entran en un programa .NET. ¿Cómo escribo una selección contra el cursor ... alguna muestra sería agradable? –

+0

Use Toad en su lugar, se mostrará el contenido de un refcursor para usted. –

Respuesta

-2

Para ver los resultados del cursor, debe recorrer el cursor e imprimir los valores. Necesita saber los nombres de columna de lo que está devolviendo el cursor. Usted puede hacer algo como:

DECLARE 
    type output_cursor is ref cursor; 
    P_CURSOR output_cursor; 
BEGIN 
    P_CURSOR := NULL; 
    DOCTORS_APP.get_reminders ( P_NOTIFICATION_ID => 1975357,P_CURSOR => P_CURSOR) ; 
    //replace Column1 and Column2 with actual column names 
    FOR CUR_VAL in P_CURSOR LOOP 
     DBMS_OUTPUT.PUT_LINE(CUR_VAL.Column1||' '||CUR_VAL.Column2); 
    END LOOP; 
END; 
+1

Probé la muestra, da error. –

+0

¿qué error? ¿Ha rellenado Columna1 y Columna2 con nombres de columna reales? –

+1

error error a partir de la línea 1 en comando: informe de error: ORA-06550: línea 11, columna 10: PLS-00221: 'P_CURSOR' no es un procedimiento o no está definida ORA-06550: línea 11 , columna 1: PL/SQL: Declaración ignorado 06550. 00000 - "línea% s, columna% s: \ n% s" * Causa: Por lo general, un error de/compilación de SQL PL. * Acción: –

21

Se puede utilizar una variable de vinculación declarada en SQL Developer para sostener y mostrar los resultados:

var r refcursor; 
exec myPackage.mySPTest(P_NOTIFICATION_ID => 1975357, P_CURSOR => :r); 
print r; 

exec es la abreviatura de un bloque anónimo así que esto es equivalente a:

var r refcursor; 
begin 
    myPackage.mySPTest(P_NOTIFICATION_ID => 1975357, P_CURSOR => :r); 
end; 
/
print r; 

A menos P_CURSOR se declara como algo inútil, tal vez ...

+0

Ah, no me había dado cuenta había puesto dos enlaces en su comentario sobre la cuestión; el segundo (y un enlace en el primer) punto a Tony Andrews haciendo lo mismo. Iba de una [respuesta anterior] (http://stackoverflow.com/questions/3526798/best-way-tool-to-get-the-results-from-an-oracle-package-procedure/3527037#3527037) por mi cuenta sin embargo. –

Cuestiones relacionadas