Der Cursor ist nur ein Zeiger auf eine Ergebnismenge. Um seinen Inhalt zu referenzieren, müssen Sie fetch
in eine Variable einfügen. Beachten Sie, dass die Variable ein Datensatztyp sein muss, der der Projektion der Abfrage entspricht. Dies kann schwierig sein, wenn Sie dynamisches SQL verwenden, um eine flüssige Gruppe von Spalten zu implementieren.
Wie auch immer, so etwas wie diese:
declare
cur1 sys_refcursor;
Type cur_rec is record (
rule_id number,
rule_desc varchar2(32));
row1 cur_rec;
....
Begin
...
open cur1 for stmt;
for row1 in cur1 loop
Dbms_output.put_line(row1.rule_id);
End loop;
....
End;
„Wenn ich die Art der Spalt im Ergebnis nicht wissen, dann kann ich nicht eine Variable erstellen, um die Cursor-Werte zu erfassen“
Das Leben ist komplizierter, wenn Sie die Projektion Ihrer Abfrage zur Kompilierzeit nicht kennen. Sie können Native Dynamic SQL nicht mehr verwenden, Sie müssen den vollständigen DBMS_SQL verwenden.
In 11g führte Oracle die sogenannte Methode 4 Dynamic SQL ein. Dies erlaubt uns, variable Projektionen auf Kosten von viel mehr Code zu verarbeiten. Adrian Billington hat auf seiner Website Oracle-developer.net eine ausgezeichnete Einführung dazu geschrieben. Check it out
Hallo @APC: Vielen Dank für die Zeit nehmen .. Wenn ich eine Variable nicht die Art der Spalten im Ergebnis wissen, dann kann ich nicht erstellen um die Cursorwerte zu erfassen .. ist es? – thealchemist
Das Leben wird härter. Welche Oracle-Version verwenden Sie? – APC
Ich verwende die Version 4.1.5 :) – thealchemist