Frage

Ich habe einen Cursor definiert in PL / SQL, und ich frage mich, was der beste Weg, um es von Pro zu verwenden C. Normalerweise für einen Cursor definiert in Pro C würden Sie tun:

EXEC SQL DECLARE curs CURSOR FOR SELECT 1 FROM DUAL;
EXEC SQL OPEN curs;
EXEC SQL FETCH curs INTO :foo;
EXEC SQL CLOSE cusr;

Ich hatte gehofft, dass die gleiche (oder ähnliche) Syntax für ein verpacktes Cursor funktionieren würde. Zum Beispiel habe ich ein Paket MyPack, mit einer Erklärung

type MyType is record (X integer);
cursor MyCurs(x in integer) return MyType;

Jetzt habe ich in meinem Pro * C-Code ein eher unbefriedigendes Stück eingebetteter PL / SQL, die den Cursor öffnet, funktioniert der Abruf usw., da ich nicht die erste Art von Syntax Arbeit bekommen konnte. Am Beispiel

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;

Wer weiß, ob es eine weitere "Pure" Pro * C Ansatz?

War es hilfreich?

Lösung

Es wäre eigentlich nicht viel anders als Ihr erstes Beispiel, so stellen Sie sicher, dass Sie den Cursor Definition ist im Paket spec und nicht der Gehäusekörper. Nicht „declare“ es und gehen Sie einfach mit so etwas wie:

Datenbankobjekt:

create or replace package mypkg as 
  cursor mycur is 
    SELECT 1 FROM DUAL; 
end;

Pro * C:

EXEC SQL OPEN schema.mypkg.mycur; 
EXEC SQL FETCH schema.mypkg.mycur INTO :foo; 
EXEC SQL CLOSE schema.mypkg.mycur; 

Natürlich müsste das Paket an den Oracle-Benutzer zugänglich sein, die Sie anschließen, usw. Wenn das Paket im Besitz des Benutzers verbindet, oder es ist ein Synonym vorhanden, das „Schema“. ist nicht in der Pro * c Anrufe.

erforderlich

Andere Tipps

Ja. Führen Sie eine Google-Suche auf den Begriff REF CURSOR und Sie sollten sehen, Beispiele dafür, was Sie tun möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top