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 :

Créer séquence "dynamiquement"


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut Créer séquence "dynamiquement"
    Bonjour,

    Dans la mise à jour de ma base de données, je crée une nouvelle table devant recevoir les données de mon ancienne table.

    La clé primaire de l'ancienne table est un id auto incrémenté par un trigger qui récupère la valeur de la séquence créée spécialement pour ça.

    L'update de la base de données est stockée dans un script sql qui sera lancé sur les serveurs ayant besoin de l'update et un problème se pose pour moi.

    Lorsque je vais remplir ma nouvelle table, je vais faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into new_table select * from last_table;
    (grossièrement)

    Une fois l'insert exécuté, je veux créer la séquence et le trigger pour l'auto incrément de la nouvelle table, mais il faut que le script sache à quelle valeur commencer la séquence (id le plus élevé dans la nouvelle table).

    J'ai eu plusieurs idées :

    tout d'abord j'ai essayé de créer des séquences comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE SEQUENCE ma_sequence
    START WITH (SELECT MAX(id) FROM new_table)
    MINVALUE 0
    NOCYCLE
    NOCACHE
    ORDER;
    et comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE SEQUENCE ma_sequence
    START WITH SELECT MAX(id) FROM new_table
    MINVALUE 0
    NOCYCLE
    NOCACHE
    ORDER;
    mais sans succès.

    J'ai ensuite pensé récupérer l'ancienne séquence en la renommant pour qu'elle corresponde à la nouvelle convention de nomage, mais j'ai eu ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> UPDATE user_sequences SET sequence_name='new_name' WHERE sequence_name='last_name';
    UPDATE user_sequences SET sequence_name='new_name' WHERE sequence_name='last_name'
               *
    ERROR at line 1:
    ORA-01031: insufficient privileges
    Donc l'utilisateur que j'emploie ne pourra pas faire l'opération dans le script.

    Pour info, je mets toutes les requêtes dans un script pour n'avoir qu'à lancer le script sur les serveurs de prod (il faut donc que tout marche du premier coup ! d'ou mes tests)

    Quelqu'un aurait-il une idée pour faire fonctionner l'une des deux idées, ou une autre idée qui marchera ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    update dans une table du catalogue... t'es téméraire toi

    Tu peux faire sous SQL*Plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    COL max_id new_value max_id
    SELECT MAX(id) max_id FROM new_table;
     
    CREATE SEQUENCE ma_sequence
    START WITH &max_id
    MINVALUE &max_id
    NOCYCLE
    NOCACHE
    ORDER;

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    Sinon j'ai trouvé une commande toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RENAME last_name TO new_name;
    j'ai testé ça marche bien, je vais plutôt faire comme ça, ça sera surement le plus simple ^^

    Mais merci pour ta réponse

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

Discussions similaires

  1. comment créer des séquences lignes dynamiquement
    Par aelmedra dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 14/09/2006, 13h42
  2. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 11h34

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