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

SQL Oracle Discussion :

ORA-02287: sequence number not allowed here


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut ORA-02287: sequence number not allowed here
    Bonjour tous le monde, je sais il est dimanche, il est tôt,
    mais voilà, j'aimerai faire l'update suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    UPDATE ph2_customer c
    SET (customer_id, billing_customer) =  
    		(
    		SELECT
    			customer_id.nextval,c.site_code
    		FROM
    			ph2_item i
    		WHERE
    			c.site_code = SUBSTR(i.old_sys_ref,(INSTR(i.old_sys_ref,':')-1))
    		)
    WHERE
    	c.customer_id IS NULL;
    et l'erreur, ben comme dans le titre.
    ORA-02287: sequence number not allowed here.

    J'ai lu null part qu'on ne pouvait pas- ni qu'on pouvait d'ailleur - faire appelle à une séquence dans un update

    bien à vous tous

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut ORA-02287: sequence number not allowed here.
    J'ai trouvé un debut de réponse ici:
    http://download-west.oracle.com/docs...elements6a.htm

    Qui dit:
    Restrictions on Sequence Values

    You cannot use CURRVAL and NEXTVAL in the following constructs:

    * A subquery in a DELETE, SELECT, or UPDATE statement.

    Alors j'ai coupé mon update en deux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE ph2_customer 
    SET customer_id =  customer_id.NEXTVAL
    WHERE
    	customer_id IS NULL;
    La même chose pour la column billing_customer.
    Si quelqu'un à plus d'info ou une façon plus élégante....
    Bon WE à tous

  3. #3
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par Mykhell Voir le message
    ...ou une façon plus élégante....
    Est-ce qu'un MERGE est suffisamment elegant ?
    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
    29
    30
    31
    32
    SQL> update Mykhell_1
      2  set (id,string) = (select Mykhell_seq.nextval, string from Mykhell_2);
    set (id,string) = (select Mykhell_seq.nextval, string from Mykhell_2)
                                          *
    ERROR at line 2:
    ORA-02287: sequence number not allowed here
     
     
    SQL>
    SQL> merge into Mykhell_1 a
      2  using (select string from Mykhell_2) b
      3  on (a.string=b.string)
      4  when matched then update set a.id=Mykhell_seq.nextval;
     
    4 rows merged.
     
    SQL> select * from Mykhell_1;
     
            ID STRING
    ---------- ----------
             1 WIHGGZYALT
             2 PKMZZLJHUB
             3 KDHTJMYHTC
             4 PNEQSYGENQ
               HHRZMFIATK
               WSCXRFUGOZ
               BNNPKHITEM
               CRPMBXIQTC
               WUAVZGTYWG
               YHRBGROASQ
     
    10 rows selected.
    Ta requete deviendrait donc quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MERGE INTO ph2_customer c
    USING (select a.rowid rwd, a.site_code
           from   ph2_customer a, ph2_item b
           where  a.customer_id is not null
           and    a.site_code = SUBSTR(b.old_sys_ref,(INSTR(b.old_sys_ref,':')-1))) d
    ON    (c.rowid=d.rwd)
    WHEN MATCHED THEN update set c.customer_id = customer_id.NEXTVAL, 
                                 c.site_code   = d.site_code;
    Nicolas.

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Ou tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    UPDATE ph2_customer c
    SET customer_id = customer_id.NEXTVAL, 
        billing_customer =  
        (
        SELECT c.site_code
        FROM
          ph2_item i
        WHERE
          c.site_code = SUBSTR(i.old_sys_ref,(INSTR(i.old_sys_ref,':')-1))
        )
    WHERE
      c.customer_id IS NULL;

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Merci
    Merci pour vos deux reponses,
    Je ne connaissais pas le MERGE, je vais etudier cela de plus pres.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/10/2013, 22h48
  2. Réponses: 2
    Dernier message: 18/02/2013, 09h01
  3. Réponses: 4
    Dernier message: 31/07/2008, 12h32
  4. Ora-30051 VERSIONS clause not allowed here
    Par big1 dans le forum Administration
    Réponses: 6
    Dernier message: 13/02/2007, 14h35
  5. [W3C] Pb document type does not allow element "BODY" here W3C validator
    Par megapacman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/06/2006, 13h42

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