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

PL/SQL Oracle Discussion :

Mise à jour des séquences après import de données


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut Mise à jour des séquences après import de données
    Bonjour tout le monde,

    Je souhaite mettre à jour mes séquences après avoir importer des données.
    Pour cela, je procède comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Declare
    varmax integer;
    req1 varchar(256);
    req2 varchar(256);
    begin
    SELECT max(id_produit) INTO varmax FROM t1_produit;
    varmax:= varmax-2;
    req1:='alter sequence T1_PRODUIT_ID_PRODUIT_SEQ increment by ' || varmax || ';';
    req2:='alter sequence T1_PRODUIT_ID_PRODUIT_SEQ increment by 1;';
    execute immediate req1;
    execute immediate req2;
    end;
    /
    Ne connaissant pas trop le PL/SQL, j'ai du faire des erreurs de syntaxe car à l'exécution j'ai cette erreur :

    Rapport d'erreur :
    ORA-00911: caractère non valide
    ORA-06512: à ligne 10
    00911. 00000 - "invalid character"
    *Cause: identifiers may not start with any ASCII character other than
    letters and numbers. $#_ are also allowed after the first
    character. Identifiers enclosed by doublequotes may contain
    any character other than a doublequote. Alternative quotes
    (q'#...#') cannot use spaces, tabs, or carriage returns as
    delimiters. For all other contexts, consult the SQL Language
    Reference Manual.
    C'est certainement les || de cette ligne qui pose un problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req1:='alter sequence T1_PRODUIT_ID_PRODUIT_SEQ increment by ' || varmax || ';';
    Est-ce que quelqu'un peut m'éclaircir ?

  2. #2
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 10
    Par défaut
    c'est le ";" qui pose problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    req1:='alter sequence T1_PRODUIT_ID_PRODUIT_SEQ increment by ' || varmax ;
    req2:='alter sequence T1_PRODUIT_ID_PRODUIT_SEQ increment by 1';

  3. #3
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Bah merci, pour moi une requête sql doit avoir un ; Vive l'école lol
    Le bloc s'exécute sans erreur

    Mais il y a un problème dans ma mise à jour, ma séquence n'est pas à jour

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT max(id_produit) FROM t1_produit;
    cela me renvoi la valeur 115.

    permet de mettre 113 à varmax.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req1:='alter sequence T1_PRODUIT_ID_PRODUIT_SEQ increment by ' || varmax || ';';
    Sachant que par défaut, ma séquence est à 1, l'incrément 113 met ma séquence à 114.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req2:='alter sequence T1_PRODUIT_ID_PRODUIT_SEQ increment by 1;';
    Et on remet l'incrément correctement puis en même cela met ma séquence à 115.

    Donc le prochain produit sera enregistré à la valeur 116.



    Voilà ma logique que j'ai suivi pour mettre en place la mise à jour de ma séquence.
    Où est mon erreur ?

  4. #4
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 10
    Par défaut
    J'aurais plûtot supprimé la séquence et la recréer en mettant start with correspondant à ta valeur max + 1

  5. #5
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Je sais qu'il est possible de procéder comme cela mais vue le travail que j'ai effectué pour mettre en place ces triggers, séquences ... (automatiquement lors de la migration), le fait de supprimer et de recréer dévaloriseraient ce que j'ai fais précédemment. Cela m'embête un peu lol.

    C'est pour cela que je passe par un ALTER SEQUENCE

    Normalement c'est possible de passer par un ALTER SEQUENCE non ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Par défaut
    moi je crois ke tas pas à modifier "increment by".
    il fallait ou bien
    1- faire un boucle (de 1.. v_max) pour incrementer la valeur de nextval
    2- ou bien supprimer la sequence avec un drop sequence et creer une nouvelle avec les memes parametres sauf "start with v_max".

  7. #7
    Membre éclairé Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Par défaut
    Citation Envoyé par shan08 Voir le message
    1- faire un boucle (de 1.. v_max) pour incrementer la valeur de nextval
    je l'ai déjà mis en place ça mais plus d'un millions de produits vont arriver dans la base ... lol

  8. #8
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 10

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Par défaut
    Citation Envoyé par 4rocky4 Voir le message
    je l'ai déjà mis en place ça mais plus d'un millions de produits vont arriver dans la base ... lol
    bah comme tu veux mais moi a ta place je ferai comme ca
    c beaucoup plus sur
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     declare
     x_n number;
    v_max number :=100 -- a calculer
     begin
     for i in 1 .. v_max
     loop
     select  sequence.nextval into x_n
     from dual;
     end loop;
     end ;

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

Discussions similaires

  1. [Vxi3] Mise à jour des rapports après modification d'un univers
    Par caribou29 dans le forum Webi
    Réponses: 3
    Dernier message: 27/02/2012, 16h56
  2. Réponses: 5
    Dernier message: 20/09/2011, 18h55
  3. Mise à jour de champs aprés importation excel
    Par MAMANHOU dans le forum IHM
    Réponses: 3
    Dernier message: 15/10/2008, 16h23
  4. Réponses: 2
    Dernier message: 21/04/2007, 20h19
  5. Mise à jour des séquences
    Par delphyjp dans le forum Oracle
    Réponses: 10
    Dernier message: 20/01/2006, 22h44

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