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

Administration Oracle Discussion :

Script de modification de séquences existantes


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut Script de modification de séquences existantes
    Bonjour,

    je voulais savoir si qq'un avait un script qui permettrait de dropper des sequences existantes appartenant à un user et de les recréer en modifiant la valeur du startwith de la nouvelle sequence avec le next_val de la sequence existante.
    Si on pouvait faire un ALTER SEQUENCE pour modifier le start with ça serait bien mais on ne peut pas.

    voici un début de script que j'ai élaboré mais il me manque les autres caractéristiques de la séquence:cycle,order etc.
    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
     
    declare
     
    	v_sql varchar2(255);
    	v_num_seq number;
     
    begin
     
    	-- boucle sur toutes les sequences
    	for cur_rec in (select * from user_sequences)
    	loop
     
    		-- récup du nextval de la séquence
    		v_sql := 'select ' || cur_rec.sequence_name || '.nextval from dual';
    		execute immediate v_sql into v_num_seq;
     
    		v_sql := 'DROP SEQUENCE ' || cur_rec.sequence_name;
    		execute immediate v_sql;
     
    		v_sql := 'create sequence '|| cur_rec.sequence_name || ' minvalue ' || cur_rec.min_value || ' maxvalue ' || cur_rec.max_value || 
    			' increment by ' || cur_rec.increment_by || ' START WITH ' || v_num_seq;
     
    		execute immediate v_sql;
     
    	end loop;
     
    end;
    /

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut
    qu'en pensez-vous ?
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    declare
     
    	v_sql varchar2(255);
    	v_num_seq number;
     
    begin
     
    	-- boucle sur toutes les sequences
    	for cur_rec in (select * from user_sequences)
    	loop
     
    		-- récup du nextval de la séquence
    		v_sql := 'select ' || cur_rec.sequence_name || '.nextval from dual';
    		execute immediate v_sql into v_num_seq;
     
    		-- suppression de la sequence
    		v_sql := 'DROP SEQUENCE ' || cur_rec.sequence_name;
    		execute immediate v_sql;
     
    		-- on recréer la même séquence en modifiant juste le start with
    		v_sql := 'create sequence '|| cur_rec.sequence_name || ' minvalue ' || cur_rec.min_value || ' maxvalue ' || cur_rec.max_value || 
    			' increment by ' || cur_rec.increment_by || ' START WITH ' || v_num_seq;
     
    		-- si CYCLE est activé sinon NOCYCLE par defaut
    		IF cur_rec.cycle_flag = 'Y' THEN
    			v_sql := v_sql || ' CYCLE';
    		END IF;
     
    		-- si CACHE = 0 alors NOCACHE si 20 alors valeur par defaut
    		IF cur_rec.cache_size = '0' THEN
    			v_sql := v_sql || ' NOCACHE';
    		ELSE
    			v_sql := v_sql || ' CACHE ' || cur_rec.cache_size;
    		END IF;
     
    		-- si ORDER est activé sinon NOORDER par defaut
    		IF cur_rec.order_flag = 'Y' THEN
    			v_sql := v_sql || ' ORDER';
    		END IF;		
     
    		execute immediate v_sql;
     
    	end loop;
     
    end;
    /
    faut il penser à autre chose?
    les synonymes existant sur ces sequences normalement ne bougent pas ?

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par farenheiit Voir le message
    je voulais savoir si qq'un avait un script qui permettrait de dropper des sequences existantes appartenant à un user et de les recréer en modifiant la valeur du startwith de la nouvelle sequence avec le next_val de la sequence existante.
    Si on pouvait faire un ALTER SEQUENCE pour modifier le start with ça serait bien mais on ne peut pas.
    Bonjour

    Ca donne l'impression de ne servir strictement à rien ! Quel est l'intérêt de la manip ??

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut
    si ça sert car des sequences ont été recrées sur une base existante avec des valeurs de start with incorrects: certaines valeurs de séquences étaient déjà présentes en base sur des colonnes uniques.

    il me faut recréer les séquences avec les bonnes valeurs pour le start with.

    il me semble que mon script est bon finalement.

    je me demande juste s'il peut y avoir des impacts sur le reste de la base.
    Il est certain que les synonymes sur ces sequences seront invalides; il faudra donc les recompiler.

    cdmt,

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 50
    Par défaut
    Pomalaix a raison, ce script ne servira à rien au vu de votre problème de 'start with'.

    Puisque vos séquences sont utilisées pour alimenter certaines colonnes de vos tables, il faut que votre script aille lire les valeurs courantes de ces colonnes pour les utiliser comme valeurs de départ (+1) de vos séquences. Ce qu'on ne voit pas à la lecture de votre script.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut
    je suis trop bête!!!

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut
    il faut en fait que je récupère les valeurs des sequences de la base prod.
    comment modifier le script pour qu'il me génère un script à partir d'une base de prod pour que je puisse l'executer sur la base de test

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

Discussions similaires

  1. Script WISE : modification contenu variable
    Par ghisl1 dans le forum Installation, Déploiement et Sécurité
    Réponses: 0
    Dernier message: 20/06/2008, 12h57
  2. [AJAX] Script inline modification
    Par lelectronique.com dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 28/03/2008, 19h31
  3. script de modification d'une string dans un champ
    Par cfrancois dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/08/2007, 11h11
  4. Script des modifications effectuées via la console
    Par secdeouf dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2006, 19h28
  5. Scripting de modification de fichier
    Par solp dans le forum Linux
    Réponses: 2
    Dernier message: 21/05/2006, 12h57

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