IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[PL/Sql]Appel de sequence


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut [PL/Sql]Appel de sequence
    Bonjour,

    j'ai créé 2 sequence, s_opt_1 et s_opt_2.
    Elle s'incrémente de 1.

    Je les appelle comme suit dans ma procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    FOR C IN 1 .. MAX C
    LOOP
    SELECT S_OPT_||C||.nextval into valeur
    from dual
    END LOOP
    Mais cela ne fonctionne pas, j'ai l'erreur suivante:
    Missing expression.
    Y a t'il une autre solution plutot que de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    IF C=1
    THEN
     SELECT S_OPT_1.next_val into valeur
    from dual;
    ELSE
      Select s_opt_2.next_val into valeur
    from dual;
    END IF

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Heu... sans avoir testé, je propose EXECUTE IMMEDIATE (en tout cas du SQL dynamique).
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Donc en fait ce sera ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    le_sql:='SELECT S_OPTI_:1.nextval INTO VALEUR FROM DUAL';
    EXECUTE IMMADIATE le_sql USING C;
    est ce exact?

  4. #4
    Membre actif Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Points : 208
    Points
    208
    Par défaut
    ceci marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DECLARE
    		lc$requete VARCHAR2(200);
    		TYPE ResCurTyp IS REF CURSOR;
    		c_ressource       ResCurTyp;
    		mavariable varchar2();
    BEGIN
    lc$requete:='select S_OPT_'||C||'.nextval from dual';
    OPEN c_ressource FOR lc$requete;
    FETCH c_ressource INTO mavariable;
    CLOSE c_ressource;
    END;

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Cela fonctionne ...
    merci beaucoup

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par claralavraie
    Donc en fait ce sera ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    le_sql:='SELECT S_OPTI_:1.nextval INTO VALEUR FROM DUAL';
    EXECUTE IMMADIATE le_sql USING C;
    est ce exact?
    J'attendais justement que vous testiez et que vous me disiez mais bon... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    8i ALEX> declare
      2    lc_seq  varchar2(25);
      3    ln_seq  number(4);
      4  begin
      5    lc_seq := 's_dvp';
      6    execute immediate 'select :seq_name.nextval from dual' into ln_seq using lc_seq;
      7    dbms_output.put_line('s_dvp.nextval = ' || ln_seq);
      8  end;
      9  /
    declare
    *
    ERROR à la ligne 1 :
    ORA-01722: invalid number
    ORA-06512: at line 6
     
     
    8i ALEX> declare
      2    lc_seq  varchar2(25);
      3    ln_seq  number(4);
      4  begin
      5    lc_seq := 's_dvp';
      6    execute immediate 'select ' || lc_seq || '.nextval from dual' into ln_seq;
      7    dbms_output.put_line('s_dvp.nextval = ' || ln_seq);
      8  end;
      9  /
    s_dvp.nextval = 3
     
    Procédure PL/SQL terminée avec succès.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [sql] Décrémenter une sequence
    Par imedg dans le forum Oracle
    Réponses: 7
    Dernier message: 28/03/2006, 15h22
  2. [PL/SQL]Appel d'une fonction d'un pkg décompilé
    Par keikun dans le forum Oracle
    Réponses: 1
    Dernier message: 21/03/2006, 10h34
  3. [PL/SQL] appel d'une procedure dans une procedure
    Par Ilhan_ dans le forum Oracle
    Réponses: 9
    Dernier message: 28/01/2005, 10h30
  4. [PL/SQL] Appel procédure stockée dans trigger
    Par Félia dans le forum Oracle
    Réponses: 3
    Dernier message: 24/01/2005, 17h25
  5. [PL/SQL]Appel d'une classe/méthode java
    Par marsup54 dans le forum SQL
    Réponses: 4
    Dernier message: 30/06/2004, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo