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 :

Séquence dans Toad 11


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 40
    Points : 29
    Points
    29
    Par défaut Séquence dans Toad 11
    Bonjour, j'aimerai créer une séquence pour année 2016 et 2017
    voici un tableau

    REF NUM_ENVOI
    ............
    03-10/2016 1001
    03-11/2016 1002
    03-12/2016 1003

    01-01/2017 0001
    01-02/2017 0002
    01-02/2017 0003

    pendant l'insertion : quand Réf indique xx-xx/2016 la numérotation continue toujours, par contre quand réf inqique xx-XX/2017 la numérotation débute 0001 et s'incremente; voici la séquence en question à modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE SEQUENCE COMPTA.NUM_ENVOI
      START WITH 0001
      MAXVALUE 999999999999999999999999999
      MINVALUE 1
      NOCYCLE
      NOCACHE
      NOORDER;
    NB : quelques part il y a une forms qui appelle cette séquence dans TOAD.Nom : séquence tableau.JPG
Affichages : 304
Taille : 14,8 Ko

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Quelque chose de ce goût là :
    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
    grant create sequence to <votre_user>;
     
    create table suivi_envoi
    ( ref_envoi        varchar2(10)
    , num_envoi        varchar2( 4)
    );
     
    create or replace procedure p_create_sequence(sequence_name varchar2)
    authid current_user
    is
        pragma autonomous_transaction;
     
    begin
        execute immediate 'create sequence ' || p_create_sequence.sequence_name || ' nocache nocycle';
     
    exception
        when others then
            raise;
     
    end;
    /
     
    create or replace trigger tgbi_suivi_envoi
    before insert on suivi_envoi
    for each row
    declare
        c$_annee_envoi     constant varchar2(  4) := substr(:new.ref_envoi, -4);
        v$_sql                      varchar2(500);
        v$_val_sequence             number(10)     := 0;
        e$_sequence_not_exists      exception;
        pragma exception_init(e$_sequence_not_exists, -2289);
     
    begin
        v$_sql := 'select seq_suivi_envoi_' || c$_annee_envoi || '.nextval from dual';
        execute immediate v$_sql into v$_val_sequence;
        :new.num_envoi := to_char(v$_val_sequence, 'fm0000');
     
    exception
        when e$_sequence_not_exists then
            p_create_sequence('seq_suivi_envoi_' || c$_annee_envoi);
            v$_sql := 'select seq_suivi_envoi_' || c$_annee_envoi || '.nextval from dual';
            execute immediate v$_sql into v$_val_sequence;
            :new.num_envoi := to_char(v$_val_sequence, 'fm0000');
    end;
    /
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    select count(*)
      from user_sequences
     where sequence_name like 'SEQ$_SUIVI$_ENVOI%' escape '$';
     
      COUNT(*)
    ----------
             0
     
    select * from suivi_envoi;
    -- aucune ligne sélectionnée
     
     
    insert into suivi_envoi (ref_envoi) values ('03-10/2016');
    insert into suivi_envoi (ref_envoi) values ('03-11/2016');
    insert into suivi_envoi (ref_envoi) values ('03-12/2016');
    select * from suivi_envoi;
     
    REF_ENVOI  NUM_
    ---------- ----
    03-10/2016 0001
    03-11/2016 0002
    03-12/2016 0003
     
    select count(*)
      from user_sequences
     where sequence_name like 'SEQ$_SUIVI$_ENVOI%' escape '$';
     
      COUNT(*)
    ----------
             1
     
    insert into suivi_envoi (ref_envoi) values ('01-01/2017');
    insert into suivi_envoi (ref_envoi) values ('01-02/2017');
    insert into suivi_envoi (ref_envoi) values ('01-02/2017');
    select * from suivi_envoi;
     
    REF_ENVOI  NUM_
    ---------- ----
    03-10/2016 0001
    03-11/2016 0002
    03-12/2016 0003
    01-01/2017 0001
    01-02/2017 0002
    01-02/2017 0003
     
    select count(*)
      from user_sequences
     where sequence_name like 'SEQ$_SUIVI$_ENVOI%' escape '$';
     
      COUNT(*)
    ----------
             2
     
    rollback;
    -- Annulation (rollback) terminée.
     
    select * from suivi_envoi;
    -- aucune ligne sélectionnée
     
    select count(*)
      from user_sequences
     where sequence_name like 'SEQ$_SUIVI$_ENVOI%' escape '$';
     
      COUNT(*)
    ----------
             2
    Après je ne suis pas complètement fan de la solution, je pense que mnitu aurait a y redire.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/07/2007, 15h22
  2. HS: parenthèse ouvrante/fermante dans Toad
    Par ukanoldai dans le forum Toad
    Réponses: 9
    Dernier message: 30/04/2007, 15h29
  3. Règle de nommage des séquences dans un MPD
    Par apad dans le forum PowerAMC
    Réponses: 1
    Dernier message: 02/11/2006, 15h01
  4. Listes de tables "favorites" dans Toad
    Par nebule dans le forum Toad
    Réponses: 8
    Dernier message: 13/10/2005, 11h51
  5. Réponses: 4
    Dernier message: 18/10/2004, 16h18

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