Oracle-PLSQL - Deklarieren Sie einen cursor auf eine nicht vorhandene Tabelle
Möchte ich deklarieren Sie einen cursor für eine Tabelle, die nicht vorhanden ist. Natürlich, mein Verfahren nicht kompilieren.
Diese Tabelle ist eine temporäre Tabelle erstellt und durch einen vorgegebenen Prozess. Es existieren zur Laufzeit, sondern zur compile-Zeit seine eine andere Geschichte.
Für mein select /Update einer anderen DML-Operationen, die ich verwendet habe,
EXECUTE IMMEDIATE 'operation from tmp_table'
aber ich kann nicht finden einen workaround für Cursor.
Gibt es eine Möglichkeit?
Im Grunde, ich will, dass das kompilieren
drop table test;
/*from this on should compile*/
DECLARE
cursor c is select * from test;
BEGIN
for reg in c LOOP
/*...*/
END LOOP;
END;
update
Bisher nicht kompilieren:
SQL> declare
2 c sys_refcursor;
3 BEGIN
4 open c for 'select * from pepito'; -- 'pepito' does not exist
5 close c;
6 end;
7 /
declare
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at line 4
Sollten CREATE PROCEDURE, danke.
Vielen Dank im Voraus.
- Sie erhalten die Ausnahme, da Sie eigentlich den code ausführen. Ersetzen Sie Ihre
declare
durch eineCREATE PROCEDURE test_cursor AS
um den code zu kompilieren. - :facepalm 15cccc
- TOAD hat keine compile-button. :S Das sollte trivial sein !!!
- "ERKLÄREN..BEGIN..END;/" bedeutet "kompilieren und ausführen dieses anonymen block". Dies ist, warum Sie immer ORA-00942. CREATE PROCEDURE ...;/" bedeutet "kompilieren und erstellen Sie diese Prozedur". Sie werden nicht erhalten, ORA-00942 dann, bis Sie die Prozedur aufrufen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage zu definieren, den cursor so:
Können Sie auch binden Argumente:
Weitere Informationen finden Sie in der Oracle-Dokumentation der OPEN-FOR-Anweisung.
Beispiel für die Verwendung einer gespeicherten Prozedur
Erstellen temporärer Tabellen, wie es erforderlich ist in der Regel nicht als gute Praxis bei Oracle, wo Globale Temporäre Tabellen sind besser und würde nicht dazu führen, dieses problem
Können Sie DBMS_SQL verwenden, um noch mehr Flexibilität als die ref cursor-Methode beschrieben von Peter Lang. Aber es bedeutet mehr Arbeit, auch.