Referenz cursor und Gespeicherte Prozeduren in Oracle
Ich geschrieben habe, eine einfache gespeicherte Prozedur in PL/SQL ausführen, das äquivalent von
SELECT * FROM tablename
Hier wird das Verfahren liefert eine Referenz cursor
create or replace
procedure proc_name (outVal OUT sys_refcursor) as
myCursor sys_refcursor;
myRecords records%ROWTYPE;
l_sql VARCHAR(2000);
begin
l_sql := 'SELECT * FROM RECORDS';
open myCursor for l_sql;
loop
FETCH myCursor INTO myRecords;
EXIT WHEN myCursor%NOTFOUND;
"DBMS_OUTPUT.put_line('myRecords.name =' || myRecords.name);"
end loop;
close myCursor;
end;
Wenn ich jetzt ausführen wollen, meine Vorgehensweise in der SQL-Eingabeaufforderung, ohne die Zeile in Anführungszeichen in meinem code gehe ich über das tun es auf diese Weise
VARIABLE cr REFCURSOR
EXEC proc_name(:cr)
Nun bekomme ich eine Aufforderung zu sagen
PL/SQL procedure successfully completed
Wenn ich jetzt versuche den Befehl auszuführen
print cr;
Bekomme ich eine Fehlermeldung
ORA-24338: Statement handle not executed
Bitte helfen Sie mir mit diesem . Ich muss wissen, wie man drucken Sie die Tabelle mit nur diesem Referenz-cursor, der zurückgegeben durch meine gespeicherten Prozedur . Ich will nicht alles drucken innerhalb des Verfahrens selbst und damit um das entfernen der Zeile in Anführungszeichen aus dem Verfahren alle zusammen .
InformationsquelleAutor Saiesh | 2012-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie eine Fehlermeldung, weil der cursor wird geschlossen, indem die Verfahren, deshalb kann es nicht "ausgedruckt" werden. Ich würde Folgendes vorschlagen:
laufen immer
SET SERVEROUTPUT ON
vor dem ausführen von Prozeduren in SQL*Plus so dass Sie sehen können, IhreDBMS_OUTPUT
melden. Verwenden Sie diesen Ausgang für debugging/logging.wenn Sie zurückkehren möchten einen cursor, der angezeigt wird, später, nicht Holen Sie den cursor in die Prozedur:
Beachten Sie, dass es ist die Verantwortung der aufrufenden Anwendung (hier SQL*Plus
PRINT
) zu Holen, und schließen Sie den cursor, richtig, nicht der PL/SQL-Prozedur.InformationsquelleAutor Vincent Malgrat