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:
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:
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:
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:
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