Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Xo
    Xo est déconnecté
    Expert Confirmé
    Avatar de Xo
    Inscrit en
    janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : janvier 2005
    Messages : 2 701
    Points : 3 854
    Points
    3 854

    Par défaut [FAQ] Vos contributions

    Chers membres,

    Comme vous vous en êtes sûrement rendu compte, la FAQ Oracle a récemment été mise à jour. Aujourd'hui, afin de continuer à vous proposer des ressources toujours plus exhaustives et variées, nous vous proposons de participer à l'élaboration de cette FAQ.

    Pour contribuer, il vous suffit de poster vos propositions à la suite de ce fil de discussion (ou de me les envoyer par MP), au format suivant :
    • la Question
    • la Rubrique
    • les Mots Clés
    • La Réponse, détaillée et commentée (avec les mentions de n° de version, ie à partir de laquelle la réponse est applicable, etc.)
    Elles seront ensuites testées et discutées en interne, avant d'être validées ou refusées. Les éventuels refus seront bien entendu justifiés (par MP) aux auteurs concernés.

    N'hésitez pas non plus à me contacter pour toute question, suggestion, critique à propos de cette FAQ.

    Merci de ne pas poser de questions en réponse à ce message, elles seront systématiquement déplacées.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  2. #2
    Membre Expert
    Inscrit en
    avril 2005
    Messages
    1 673
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 1 673
    Points : 1 508
    Points
    1 508

    Par défaut Modification d'une séquence

    Question : comment modifier la valeur d'une séquence ?
    Rubrique : Développement
    Mots clés : séquence
    Réponse :
    Pour mettre à jour la valeur courante d'une séquence, 2 techniques peuvent être utilisées :
    - la supprimer et la recréer en prenant garde à la positionner à une valeur supérieure à la dernière valeur attribuée si elle est utilisée par une clé primaire
    - modifier sa valeur d'incrémentation le temps d'une incrémentation

    Remarque : attention aux effets de cache de la séquence !

    Code :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    DROP TABLE DVP;
    CREATE TABLE DVP(
      NB NUMBER(12),
      TXT VARCHAR2(50)
    );
     
    DROP SEQUENCE S_DVP;
    CREATE SEQUENCE S_DVP START WITH 1 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCACHE;
     
    DROP TRIGGER T_DVP;
    CREATE TRIGGER T_DVP
    BEFORE INSERT ON DVP
    FOR EACH ROW
    BEGIN
      SELECT S_DVP.NEXTVAL
      INTO   :NEW.NB
      FROM DUAL;
    END;
    /
     
    INSERT INTO DVP (TXT) VALUES ('1ère insertion');
    INSERT INTO DVP (TXT) VALUES ('2ème insertion');
     
    SELECT S_DVP.CURRVAL
    FROM   DUAL;
     
    SELECT NB, TXT
    FROM   DVP;
     
    --------- 1ère technique ---------
     
    DROP SEQUENCE S_DVP;
     
    -- le trigger T_DPV n'est pas invalidé par l'instruction précédente
    -- mais ne peut pas être utilisé
    SELECT STATUS
    FROM   DBA_TRIGGERS
    WHERE  OWNER        = USER
    AND    TRIGGER_NAME = 'T_DVP';
     
    CREATE SEQUENCE S_DVP START WITH 501 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCACHE;
     
    INSERT INTO DVP (TXT) VALUES ('4ème insertion');
     
    SELECT S_DVP.CURRVAL
    FROM   DUAL;
     
    SELECT NB, TXT
    FROM   DVP;
     
     
    --------- 2ème technique ---------
     
    ALTER SEQUENCE S_DVP INCREMENT BY 200;
     
    SELECT S_DVP.NEXTVAL
    FROM   DUAL;
     
    -- le trigger T_DPV n'est pas invalidé par l'instruction précédente
    -- et il PEUT ETRE utilisé !!!!
    SELECT STATUS
    FROM   DBA_TRIGGERS
    WHERE  OWNER        = USER
    AND    TRIGGER_NAME = 'T_DVP';
     
    ALTER SEQUENCE S_DVP INCREMENT BY 1;
     
    INSERT INTO DVP (TXT) VALUES ('3ème insertion');
     
    SELECT NB, TXT
    FROM   DVP;
     
    SELECT S_DVP.CURRVAL
    FROM   DUAL;
     
    SELECT NB, TXT
    FROM   DVP;
     
    -- le pas d'incrémentation est bien de 1 comme à l'origine
    SELECT S_DVP.NEXTVAL
    FROM   DUAL;
    Exemple d'exécution :
    Code :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    10g CYRIL> DROP TABLE DVP;
     
    TABLE supprimée.
     
    10g CYRIL> CREATE TABLE DVP(
      2    NB NUMBER(12),
      3    TXT VARCHAR2(50)
      4  );
     
    TABLE créée.
     
    10g CYRIL> 
    10g CYRIL> DROP SEQUENCE S_DVP;
     
    Séquence supprimée.
     
    10g CYRIL> CREATE SEQUENCE S_DVP START WITH 1 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCACHE;
     
    Séquence créée.
     
    10g CYRIL> 
    10g CYRIL> DROP TRIGGER T_DVP;
    DROP TRIGGER T_DVP
    *
    ERREUR à la ligne 1 :
    ORA-04080: déclencheur 'T_DVP' n'existe pas
     
     
    10g CYRIL> CREATE TRIGGER T_DVP
      2  BEFORE INSERT ON DVP
      3  FOR EACH ROW
      4  BEGIN
      5    SELECT S_DVP.NEXTVAL
      6    INTO   :NEW.NB
      7    FROM DUAL;
      8  END;
      9  /
     
    Déclencheur créé.
     
    10g CYRIL> 
    10g CYRIL> INSERT INTO DVP (TXT) VALUES ('1ère insertion');
     
    1 ligne créée.
     
    10g CYRIL> INSERT INTO DVP (TXT) VALUES ('2ème insertion');
     
    1 ligne créée.
     
    10g CYRIL> 
    10g CYRIL> SELECT S_DVP.CURRVAL
      2  FROM   DUAL;
     
       CURRVAL
    ----------
             2
     
    1 ligne sélectionnée.
     
    10g CYRIL> 
    10g CYRIL> SELECT NB, TXT
      2  FROM   DVP;
     
            NB TXT
    ---------- --------------------------------------------------
             1 1ère insertion
             2 2ème insertion
     
    2 ligne(s) sélectionnée(s).
     
    10g CYRIL> 
    10g CYRIL> --------- 1ère technique ---------
    10g CYRIL> 
    10g CYRIL> DROP SEQUENCE S_DVP;
     
    Séquence supprimée.
     
    10g CYRIL> 
    10g CYRIL> -- le trigger T_DPV n'est pas invalidé par l'instruction précédente
    10g CYRIL> -- mais ne peut pas être utilisé
    10g CYRIL> SELECT STATUS
      2  FROM   DBA_TRIGGERS
      3  WHERE  OWNER        = USER
      4  AND    TRIGGER_NAME = 'T_DVP';
     
    STATUS
    --------
    ENABLED
     
    1 ligne sélectionnée.
     
    10g CYRIL> 
    10g CYRIL> CREATE SEQUENCE S_DVP START WITH 501 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCACHE;
     
    Séquence créée.
     
    10g CYRIL> 
    10g CYRIL> INSERT INTO DVP (TXT) VALUES ('4ème insertion');
     
    1 ligne créée.
     
    10g CYRIL> 
    10g CYRIL> SELECT S_DVP.CURRVAL
      2  FROM   DUAL;
     
       CURRVAL
    ----------
           501
     
    1 ligne sélectionnée.
     
    10g CYRIL> 
    10g CYRIL> SELECT NB, TXT
      2  FROM   DVP;
     
            NB TXT
    ---------- --------------------------------------------------
             1 1ère insertion
             2 2ème insertion
           501 4ème insertion
     
    3 ligne(s) sélectionnée(s).
     
    10g CYRIL> 
    10g CYRIL> 
    10g CYRIL> --------- 2ème technique ---------
    10g CYRIL> 
    10g CYRIL> ALTER SEQUENCE S_DVP INCREMENT BY 200;
     
    Séquence modifiée.
     
    10g CYRIL> 
    10g CYRIL> SELECT S_DVP.NEXTVAL
      2  FROM   DUAL;
     
       NEXTVAL
    ----------
           701
     
    1 ligne sélectionnée.
     
    10g CYRIL> 
    10g CYRIL> -- le trigger T_DPV n'est pas invalidé par l'instruction précédente
    10g CYRIL> -- et il PEUT ETRE utilisé !!!!
    10g CYRIL> SELECT STATUS
      2  FROM   DBA_TRIGGERS
      3  WHERE  OWNER        = USER
      4  AND    TRIGGER_NAME = 'T_DVP';
     
    STATUS
    --------
    ENABLED
     
    1 ligne sélectionnée.
     
    10g CYRIL> 
    10g CYRIL> ALTER SEQUENCE S_DVP INCREMENT BY 1;
     
    Séquence modifiée.
     
    10g CYRIL> 
    10g CYRIL> INSERT INTO DVP (TXT) VALUES ('3ème insertion');
     
    1 ligne créée.
     
    10g CYRIL> 
    10g CYRIL> SELECT NB, TXT
      2  FROM   DVP;
     
            NB TXT
    ---------- --------------------------------------------------
             1 1ère insertion
             2 2ème insertion
           501 4ème insertion
           702 3ème insertion
     
    4 ligne(s) sélectionnée(s).
     
    10g CYRIL> 
    10g CYRIL> SELECT S_DVP.CURRVAL
      2  FROM   DUAL;
     
       CURRVAL
    ----------
           702
     
    1 ligne sélectionnée.
     
    10g CYRIL> 
    10g CYRIL> SELECT NB, TXT
      2  FROM   DVP;
     
            NB TXT
    ---------- --------------------------------------------------
             1 1ère insertion
             2 2ème insertion
           501 4ème insertion
           702 3ème insertion
     
    4 ligne(s) sélectionnée(s).
     
    10g CYRIL> 
    10g CYRIL> -- le pas d'incrémentation est bien de 1 comme à l'origine
    10g CYRIL> SELECT S_DVP.NEXTVAL
      2  FROM   DUAL;
     
       NEXTVAL
    ----------
           703
     
    1 ligne sélectionnée.
    Cette nouvelle entrée de la FAQ pourrait être référencée (symétriquement) avec celle-ci : http://oracle.developpez.com/faq/?pa...#autoincrement
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre actif
    Homme Profil pro Guillaume HARRY
    Ingénieur d'études
    Inscrit en
    avril 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume HARRY
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : avril 2007
    Messages : 135
    Points : 174
    Points
    174

    Par défaut Procédures spécifiques d'export/import

    Bonjour,

    Sous Unix et Linux, voici quelques procédures spécifiques d'export/import

    1. Pour exporter et importer simultanément sans passer par un fichier dump

    Code :
    1
    2
    3
    4
    mkfifo fichier_pipe
    imp connection ... file=fichier_pipe &
    exp connection ... file=fichier_pipe
    Tout ce qui est envoyé dans le fichier pipe par exp est immédiatement traité par imp

    2. Pour exporter et compresser en même temps

    Code :
    1
    2
    3
    4
    mkfifo fichier_pipe
    gzip < fichier_pipe > dump.dmp.gz &
    exp connection ... file=fichier_pipe
    Tout ce qui est envoyé dans le fichier pipe par exp est immédiatement traité par gzip, donc on se retrouve au final avec un fichier dump compresser

    3. De même pour décompresser et importer en même temps

    Code :
    1
    2
    3
    4
    mkfifo fichier_pipe
    gunzip <  dump.dmp.gz > fichier_pipe &
    imp connection ... file=fichier_pipe
    Guillaume HARRY
    Expertise bases de données et Java/J2EE

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •