Bonjour à tous.

Je cherche à faire une fonction qui prend en paramètre un nom de séquence, qui vérifie si cette séquence existe, et qui retourne la valeur de son NEXTVAL.

Si la séquence n'existe pas, elle est créée par la fonction.

J'ai réussi sans difficulté à créer la séquence si elle n'existe pas, néanmoins, je n'arrive pas à retourner la valeur de NEXTVAL.

Mon problème vient du fait que je ne sais pas sur quel objet je dois appeler le .NEXTVAL (s_seqname ou '||s_seqname||').

Voici mon bout de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
CREATE or REPLACE FUNCTION F_CHECK_CREATE_SEQ (s_seqname varchar2) RETURN NUMBER AS
  nb INTEGER;
  res INTEGER;
BEGIN
  SELECT COUNT(*) INTO nb
  FROM USER_SEQUENCES
  WHERE sequence_name=s_seqname;
  if nb=0 then
    execute immediate  'CREATE SEQUENCE '|| s_seqname||' START WITH 1 INCREMENT BY 1 MAXVALUE 9999 NOCYCLE';
  end if;
  SELECT s_seqname.NEXTVAL INTO res FROM dual;
  RETURN res;
END;
Les erreurs de compilations sont pour la ligne SELECT s_seqname.NEXTVAL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Erreur(11,3): PL/SQL: SQL Statement ignored 
Erreur(11,10): PLS-00487: Invalid reference to variable 'S_SEQNAME'
Erreur(11,10): PL/SQL: ORA-02289: sequence does not exist
Avec '||s_seqname||'.NEXTVAL j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Erreur(11,3): PL/SQL: SQL Statement ignored 
Erreur(11,26): PL/SQL: ORA-00923: FROM keyword not found where expected
Si quelqu'un peut simplement m'expliquer pourquoi cela n'est pas possible d'exécuter le SELECT je lui en serait très reconnaissant.
Je poursuis mes recherches en attendant, merci de votre aide.

Cdt