Bonjour.
J'utilise Oracle 8i.
Je début avec Oracle et j'ai besoin d'utiliser une fonction stockée. J'ai écrit la fonction suivante :
Ensuite, j'appelle cette fonction avec SQL*Plus en tappant la commande suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE FUNCTION "KEPH" RETURN number IS id_fam number; BEGIN EXECUTE IMMEDIATE 'INSERT INTO bug_family (id_test, description, id_owner, date_opening) VALUES (2, ''tes'', 2, SYSDATE) RETURNING id_family INTO :1' INTO id_fam; RETURN id_fam; END;
Malheureusement, j'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select keph() from dual;
Je ne vois vraiment pas d'où peut provenir le problème. Le voyez-vous ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select keph() from dual * ERROR at line 1: ORA-01007: variable not in select list ORA-06512: at "MANG_ADMIN.KEPH", line 4 ORA-06512: at line 1
Merci d'avance.
Keph
PS : j'utilise cette fonction stockée pour récupérer l'id de l'enregistrement que je suis en train de créer. Je pourrais récupérer la valeur courante de la séquence qui génére cet id, mais je pourrai alors avoir des problèmes d'accès concurentiel. Je pense pouvoir contourner cette limitation avec la commande RETURNING INTO mais pour cela je dois faire une fonction stockée... C'est fou d'en faire autant pour si peu, non ?
Partager