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

Oracle Discussion :

codage automatique des cles et insertion


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut codage automatique des cles et insertion
    Bonsoir,
    je suis entrain de créer ub BD avec oracle.J'ai crer un declencheur pour l'insertion automatique des identifiant de quelque table tels est l'exemple suivant dans la table profession ou code_prof est un primary key
    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
    CREATE SEQUENCE Seq_prof
    START WITH 1
    NOMAXVALUE 
    MINVALUE 1
    NOCYCLE
    NOCACHE;
     
    CREATE TRIGGER Trigger_prof
       BEFORE INSERT
       ON profession
       FOR EACH ROW
    BEGIN
       SELECT seq_prof.NEXTVAL
         INTO :NEW.CODE_PROF
         FROM DUAL;
    END;
    mais ce msg apparait
    Avertissement : Déclencheur créé avec erreurs de compilation.

    qu'est ce que je doit faire et j'aime insérer en meme temps la meme valeur de ce code_prof la dans un autre table ou ce code est un FOREGEIN KEY
    s'il vous plait aidez moi
    MERCIIIII

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Il faut utiliser une variable intermédiaire dans le trigger:

    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
    67
    68
    69
     
    SQL> select * from v$version;
     
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
     
    SQL>
    SQL> drop trigger trigger_prof;
     
    Déclencheur supprimé.
     
    SQL> drop table profession purge;
     
    Table supprimée.
     
    SQL> drop sequence seq_prof;
     
    Séquence supprimée.
     
    SQL>
    SQL>
    SQL> create sequence seq_prof;
     
    Séquence créée.
     
    SQL>
    SQL> create table profession(code_prof number, texte varchar2(30));
     
    Table créée.
     
    SQL>
    SQL> create trigger trigger_prof
      2  before insert
      3  on profession
      4  for each row
      5  declare
      6  v_code number;
      7  begin
      8  select seq_prof.nextval into v_code from dual;
      9  :new.code_prof := v_code;
     10  end;
     11  /
     
    Déclencheur créé.
     
    SQL> show errors
    Pas d''erreur.
    SQL>
    SQL> insert into profession(texte) values('DBA');
     
    1 ligne créée.
     
    SQL> commit;
     
    Validation effectuée.
     
    SQL>
    SQL> select * from profession;
     
     CODE_PROF TEXTE
    ---------- ------------------------------
             1 DBA
     
    SQL>
    Vous pouvez aussi essayer de vous passer de trigger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SQL> insert into profession values (seq_prof.nextval, 'SA');
     
    1 ligne créée.
     
    SQL> select * from profession;
     
     CODE_PROF TEXTE
    ---------- ------------------------------
             1 DBA
             3 SA

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut
    merci
    mais j'ai pas réussie a insérer cette même valeur dans la table patient ou code_prof est un clé étrangère comme indique ce code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE PATIENT(
    MATRICULE CHAR(11)PRIMARY KEY,
    N_CIN integer NOT NULL,
    NOM_P VARCHAR(20)NOT NULL,
    PRENON_P VARCHAR(20)NOT NULL,
    DATE_NAISS DATE,
    LIEU_NAISS VARCHAR(100),
    ADR varchar(60),
    SEXE CHAR(1),
    CODE_PROF REFERENCES PROFESSION(CODE_PROF)
    );
    desole pour le derangement
    et merci

  4. #4
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    Dans ce cas tu fais quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SQL> insert into profession values (seq_prof.nextval, ....);
    SQL>  insert into patient values (.....,seq_prof.CURRVAL,....);

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/10/2014, 12h13
  2. [XL-2007] Insertion automatique des lignes des dates manquantes
    Par TraderAS dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/04/2013, 11h10
  3. arréter l'execution automatique des cles USB
    Par fabricen26 dans le forum Windows 8
    Réponses: 1
    Dernier message: 08/04/2013, 17h55
  4. Traitement automatique des mails.
    Par ourk dans le forum Linux
    Réponses: 2
    Dernier message: 23/09/2004, 18h14

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