Oracle procédure stockée dataset

Résolu
guilhemh Messages postés 36 Date d'inscription lundi 22 avril 2002 Statut Membre Dernière intervention 12 décembre 2005 - 14 mars 2005 à 10:57
vgoblet Messages postés 1 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 8 avril 2005 - 8 avril 2005 à 10:23
Bonjour,



J'aimerais savoir comment écrire la procédure oracle me permettant de
renvoyer un résultat composé de plusieurs lignes (select * from table)
et comment écrire le programme delphi me permettant de l'afficher dans
un dbgrid.

Je voulais le faire avec une fonction mais apparement c'est pas
possible et j'ai essayé de le faire avec un argument mais ne trouve pas
le type qui convient.



Merci de votre aide c'est très urgent.

7 réponses

vgoblet Messages postés 1 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 8 avril 2005
8 avril 2005 à 10:23
bonjour,
la réponse est là : http://bdn.borland.com/article/0,1410,28616,00.html

à savoir :

Question:

How do I get a result set from an Oracle Stored Procedure?

Answer:

A REF CURSOR is required to return a result set from a stored procedure. You will need to put the procedure in a package. To create a package use the following SQL command: CREATE PACKAGE MYPKG
IS
TYPE CursorType IS REF CURSOR;
END MyPkg;

Then when you create the procedure: CREATE PROCEDURE RETURN_RESULT_SET
(oCursor IN OUT MyPkg.CursorType) AS
BEGIN
open oCursor for select * from SomeTable;
END;

In Delphi or C++Builder, set the TStoredProc parameter DataType as type ftCursor. At this point you should treat the TStoredProc component like a TQuery and use the Open method instead of ExecProc.

Crdl.
VG
3
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 1
14 mars 2005 à 15:22
creer un dataset et écrire la requête dans la partie command. Créer un datasource et relier ce datasource au dataset par la propriété "dataset". Et enfin dans la propriété "datasource" du dbgrid mettre le datasource qui vient d'être créé.
Pour les paramètres dans la requête, il faut mettre les 2points (:) avant le nom du paramètre. Ensuite aller dans le propriété "parameters" du dataset et choisir pour chaque paramètre le bon type. Et pour donner une valeur au paramètre lors de l'appel du dataset dataset.parameters[n°duparametre].value:=lavaleur.

J'espère que tu as tout compris.

pseudoOM
0
guilhemh Messages postés 36 Date d'inscription lundi 22 avril 2002 Statut Membre Dernière intervention 12 décembre 2005
14 mars 2005 à 17:16
merci de cette réponse

en fait j'ai du mal posé la question, je veux créer une procédure
stockée oracle qui renvoie un ensemble de ligne (calcul de bourin sur
des données...)et je veux mettre ce résultat dans un datagrid, est-ce
plus clair?
0
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 1
14 mars 2005 à 18:51
Tu peux mettre ta procédure dans le dataset. Et si tu fais comme j'ai dit au dessus, le résultat s'affichera dans le dbgrid.

pseudoOM
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
guilhemh Messages postés 36 Date d'inscription lundi 22 avril 2002 Statut Membre Dernière intervention 12 décembre 2005
15 mars 2005 à 19:28
je suis d'accord avec toi mais comment écrire la procédure sous oracle (paramétre OUT)? que doit elle renvoyé?



Merci de ton aide
0
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 1
16 mars 2005 à 08:12
DECLARE
variable type (ex: var INTEGER;)
....
BEGIN
SELECT * FROM table;
(si tu dois récupérer des trucs spécifiques c'est SELECT champ INTO variable FROM table et tu peux mettre des conditions WHERE)
ton calcul de bourin;
(il peut y avoir des boucles aussi FOR .... DO ou autre)
RETURN variable;
END;

pseudoOM
0
guilhemh Messages postés 36 Date d'inscription lundi 22 avril 2002 Statut Membre Dernière intervention 12 décembre 2005
16 mars 2005 à 21:01
une procédure accepte un return ?

je n'ai pas l'impression qu'on puisse appeler une fonction ...



Ensuite c'est un type complexe que je dois renvoyé.

Merci de ton aide
0
Rejoignez-nous