Question

J'ai un curseur défini dans PL / SQL, et je me demande quelle est la meilleure façon de l'utiliser de Pro C est. Normalement, pour un curseur défini dans Pro C vous feriez:

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

J'espérais que le même (ou similaire) syntaxe travaillerait pour un curseur emballé. Par exemple, j'ai un MyPack paquet, avec une déclaration

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

Maintenant, j'ai dans mon code Pro * C un morceau assez peu satisfaisant de cette PL / SQL embarqué ouvre le curseur, fait la fetching etc., comme je ne pouvais pas obtenir le premier style de syntaxe au travail. En utilisant l'exemple

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;

Est-ce que quelqu'un sait s'il y a une approche plus "Pure" Pro * C?

Était-ce utile?

La solution

En fait, il ne serait pas très différent de votre premier exemple, assurez-vous juste la définition de votre curseur se trouve dans la spécification de l'emballage et non le corps de l'emballage. Ne pas « déclarer » et juste aller avec quelque chose comme:

objet de base de données:

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; 

Bien sûr, le paquet devrait être accessible à l'utilisateur oracle vous connectez avec, etc. Si le paquet appartient à l'utilisateur de connexion, ou il est synonyme en place, le « schéma ». n'est pas nécessaire dans les appels pro * c.

Autres conseils

Oui. Faites une recherche Google sur le terme REF CURSOR et vous devriez voir des exemples de ce que vous voulez faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top