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 :

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;
Ensuite, j'appelle cette fonction avec SQL*Plus en tappant la commande suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select keph() from dual;
Malheureusement, j'obtiens l'erreur suivante :
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
Je ne vois vraiment pas d'où peut provenir le problème. Le voyez-vous ?

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 ?