Appel d'une fonction qui retourne un 'record' (Oracle 9i) dans un code VB.net
cs_TIKATKT
Messages postés40Date d'inscriptionmardi 16 février 2010StatutMembreDernière intervention 6 février 2012
-
30 mars 2010 à 18:28
cs_TIKATKT
Messages postés40Date d'inscriptionmardi 16 février 2010StatutMembreDernière intervention 6 février 2012
-
6 avril 2010 à 12:43
Bonjour,
je travaille sur une application codée en vb.net et connectée à une base de données oracle 9i.
Dans la BD j'ai créé une procédure qui retourne une variable de type varchar2:
CREATE OR REPLACE PROCEDURE SYSTEM.Proc1( p1 in varchar, n2 out varchar ) .....
l'appel de cette procédure dans le projet VB.net ce fait comme suit:
cs_TIKATKT
Messages postés40Date d'inscriptionmardi 16 février 2010StatutMembreDernière intervention 6 février 2012 30 mars 2010 à 20:33
Rebonjour,
Le problème je l'ai à ce niveau:
...
.CommandText = "MonPackage.MaFonction"
.CommandType = CommandType.StoredProcedure
...
à l'exécution ça me donne l'erreur suivante:
ORA-06550: Ligne 1, colonne 7 :
PLS-00221: 'MaFonction' n'est pas une procédure ou est indéfini
ORA-06550: Ligne 1, colonne 7 :
PL/SQL: Statement ignored
cs_TIKATKT
Messages postés40Date d'inscriptionmardi 16 février 2010StatutMembreDernière intervention 6 février 2012 6 avril 2010 à 12:43
D'après les recherches que j'ai faites,j'ai déduit que c'est pratiquement infaisable pour ce genre de fonction qui retourne un type complexe dans mon cas 'record.
Alors là j'ai enfin changé la méthode que j'ai utilisée et j'ai créé des procédures qui ont des paramètres simples en sortie, ces paramètres je les ai rempli des valeurs retourner dans le record de la fonction du départ. et ça marche
Petit exemple:
Le Package :
CREATE OR REPLACE PACKAGE Pack1 AS
TYPE INFO1 IS RECORD (
Param1 VARCHAR2(9),
Param2 VARCHAR2(12));
--
FUNCTION Fun1(ParamF1 IN VARCHAR2) RETURN INFO1;
END Pack1;
/
La procédure:
CREATE OR REPLACE PROCEDURE GetInfo1 ( ParamP1 in varchar,
A out varchar2,
B out varchar2) IS
R Pack1.INFO1;
BEGIN
R:= Pack1.Fun1(ParamP1);
A := R.Param1;
B := R.Param2;
END;
/
Mais il me reste encore un petit problème concernant les fonctions qui retourne 'un tableau de record'
J'arrive pas à créer la procédure convenable
Voici le code de l'entête du package:
CREATE OR REPLACE PACKAGE Pack1 AS
TYPE INFO1 IS RECORD (
Param1 VARCHAR2(9),
Param2 VARCHAR2(12));
TYPE INFOS IS TABLE OF INFO1 INDEX BY BINARY_INTEGER;
--
FUNCTION Fun1(ParamF1 IN VARCHAR2) RETURN INFOS;
END Pack1;
/