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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top