Procedure ou fonction PL/QSL
Bonjour,
Je voudrais inserer une ligne dans une table qui contient une clé primaire que je voudrais auto-incrémenter avec une sequence. Mon problème est de connaitre la clé générée dans la suite de l'éxecution de mon programme.
Pour cela, je me suis dis que le plus simple est de créer une fonction PL/SQL qui insert la ligne et retourne la valeur de la clé... mais je n'y arrive pas. Est il possible de faire un Insert dans une function? Pour quoi ne fonctionne t elle pas?
j'ai créé ma sequence:
Code:
CREATE SEQUENCE auto_Ref START WITH 1 INCREMENT BY 1 MAXVALUE 99999;
et puis ma function:
Code:
1 2 3 4 5 6 7 8
| Create or replace Function add_truc (RefTruc VarChar2,truc2 VarChar2,truc3 Varchar2)
Return number is ref number;
Begin
ref:= auto_Ref.nextVal;
Insert into Tablevalues (ref,Reftruc,truc2,Truc3);
Return ref;
End;
/ |
le message d'erreur que j'obtient (actuellement ;) ) est:
Citation:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/2 PL/SQL: Statement ignored
4/25 PLS-00357: Référence de Table, Vue ou Séquence
'AUTO_REF.NEXTVAL' non autorisée dans ce contexte
Que puis-je faire?
MERCI BEAUCOUP
[Modération : Titre initial ("[Debutant] Insert dans une functionPL/SQL") édité par LeoAnderson]
[Debutant] Insert dans une functionPL/SQL
Bonjour,
Désolé mais dans mon dernier Post, j'ai parler un peu vite, ça ne marche pas...
J'ai essayé
Code:
1 2 3 4 5 6 7 8 9 10 11
| CREATE SEQUENCE auto_RefQuestion START WITH 1 INCREMENT BY 1 MAXVALUE 99999;
Create or replace Function add_question (RefQuest VarChar2,TextQ VarChar2,TypeQ Varchar2)
Return number is
Begin
Insert into Question (idquestion,refquestionnaire,text,typereponse)
values
(select auto_RefQuestion.nextVal, RefQuest,TextQ,TypeQ);
Return auto_RefQuestion.CurVal;
End;
/ |
mais j'obtient:
Citation:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/2 PL/SQL: SQL Statement ignored
6/10 PL/SQL: ORA-00936: expression absente
J'ai beau essayer de la bidouiller mais je ne m'en tire pas...
Quelqu'un peut il me depanner?
Merci!!!
[Debutant] Procedure ou fonction PL/QSL
Bonjour,
J'ai deja poser pas mal de question sur ce forum concernant mon problème mais je ne m'en tire toujours pas...
Je veux inserer un element dans une table contenant un champ qui "s'auto incrémente" via une sequence. J'ai besoin de connaitre le numero qui a été attribué a l'enregistrement apres son insertion depuis le programme qui utilise cette table pour continuer le traitement. C'est là qu'est mon problème:
- Si je cré une procedure stockée: je ne peux pas retourner la valeur courrante de la sequence vers mon interface,
- Si je cré une procedure, je ne peux pas appeler le INSERT car j'y ferai appel depuis mon interface par un truc du genre 'Select mafonction (params) from dual'
Bref je suis dans le mur...
AU SECOUR avant que je fasse le insert a la main depuis l'interface puis un select la_clé de l'élément que je viens d'inserer...
Merci