Il modo migliore per utilizzare PL / SQL pacchetto cursori dalla Pro * C
-
26-09-2019 - |
Domanda
Ho un cursore definito in PL / SQL, e mi chiedo che cosa il modo migliore per utilizzarlo da Pro C è. Normalmente per un cursore definito nella Pro C si dovrebbe fare:
EXEC SQL DECLARE curs CURSOR FOR SELECT 1 FROM DUAL;
EXEC SQL OPEN curs;
EXEC SQL FETCH curs INTO :foo;
EXEC SQL CLOSE cusr;
speravo che lo stesso (o simile) sintassi funzionerebbe per un cursore confezionato. Ad esempio, ho un pacchetto MyPack, con una dichiarazione
type MyType is record (X integer);
cursor MyCurs(x in integer) return MyType;
Ora ho nel mio codice Pro * C un pezzo piuttosto insoddisfacente di incorporato PL / SQL che si apre il cursore, fa il recupero, ecc, in quanto non ho potuto ottenere il primo stile di sintassi da lavoro. Utilizzando l'esempio
EXEC SQL EXECUTE
DECLARE
XTable is table of MyPack.MyType;
BEGIN
OPEN MyPack.MyCurs(:param);
FETCH MyPack.MyCurs INTO XTable;
CLOSE MyPack.MyCurs;
END;
END-EXEC;
Qualcuno sa se c'è un altro "Pure" approccio Pro * C?
Soluzione
E 'in realtà non sarebbe molto diverso da quello del primo esempio, basta assicurarsi che la definizione del cursore è nel spec pacchetto e non il corpo del pacchetto. Non "dichiarare" e basta andare con qualcosa come:
oggetto di database:
create or replace package mypkg as
cursor mycur is
SELECT 1 FROM DUAL;
end;
In Pro * C:
EXEC SQL OPEN schema.mypkg.mycur;
EXEC SQL FETCH schema.mypkg.mycur INTO :foo;
EXEC SQL CLOSE schema.mypkg.mycur;
Naturalmente il pacchetto avrebbe bisogno di essere accessibile per l'utente di oracolo ci si connette con, ecc Se il pacchetto è di proprietà dell'utente che si connette, o v'è un sinonimo di luogo, lo "schema". non è richiesto nei bandi Pro * C.
Altri suggerimenti
Sì. Fare una ricerca su google il termine REF CURSOR e si dovrebbe vedere alcuni esempi di ciò che si vuole fare.