Bonsoir tout le monde.
J'ai le problème dans la création (modification) d'une procédure que j'ai dans un package.
// RESOLU - voir fin du post pour la solution
Je dois, dans le cadre de mon cours de SGBD, créer une série de packages afin de gérer une application web.
A l'intérieur d'une des procédures, je dois créer la clé primaire d'un de mes tuples. Pour ce faire, je procède de la sorte:
id_prjcmd est une variable locale à ma procédure de type varchar2(25).
Code : Sélectionner tout - Visualiser dans une fenêtre à part id_prjcmd := 'CMD-'||to_char(sysdate, 'YYYYMMDD')||'-EW-'||to_char(SEQ_IDPRJCMD.nextval);
SEQ_IDPRJCMD est une séquenc qui me permettra d'avoir une sorte de compteur par jour (pas encore au point) (on est obliger de prendre une séquence, le prof ne veut pas voir de select max)
Maintenant, lors de la compilation de mon package, je rencontre l'erreur suivante:
Donc, si je comprend bien, il ne veut pas que j'accède à ma séquence. Dès lors, dans une version précédente, je pouvais utiliser ma séquence directement dans l'insert into de ma table, toujours en passant par un to_char.Error(774,83): PLS-00357: Table,View Or Sequence reference 'SEQ_IDPRJCMD.NEXTVAL' not allowed in this context
Alors, je ne comprend pas pourquoi ça ne marche.
Quelqu'un pourrait-il me rappeler un point de théorie que j'aurais zapper, ou tout simplement pas vu au cours théorique dans la partie où l'on aurait aborder les curseurs ?
En vous remerciant d'avance pour l'aide que vous pourrez m'apporter, je vous souhaite de passer une bonne fin de soirée.
Richard
// SOLUTION
Il faut, afin de pouvoir utiliser la valeur suivante de la séquence, procéder comme suit:
tout d'abord, il faut récupérer la valeur de la séquence dans une variable de type integer:
Une fois que cela est fait, il vous suffit d'utiliser votre variable, dans mon cas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT <votre séquence>.NEXTVAL into <votre variable> FROM DUAL;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select SEQ_IDPRJCMD.nextval into numsequ from DUAL; id_prjcmd := 'CMD-'||to_char(sysdate, 'YYYYMMDD')||'-EW-'||to_char(numsequ);
Partager