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

PL/SQL Oracle Discussion :

Création d'une clé primaire en utilisant un trigger


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 39
    Par défaut Création d'une clé primaire en utilisant un trigger
    Bonjours à tous les abonnés du forum,

    Je lance un trigger pour générer la clé primaire de la table Computer, à partir de la clé primaire de la table C_HW(qui se trouve dans la table computer),

    Mais je reçois le message suivant au cours de l'exécution :
    ORA-01403: aucune donnée trouvée
    Voila le code du déclencheur :
    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
    create or replace trigger "T_C_K"
    BEFORE
    insert on "COMPUTER"
    for each row
     DECLARE 
        CT  C_HW.CH_TYPE%TYPE;
        CH1 CHAR(5);
        CH2 CHAR(2);
        CH3 CHAR(7);
        NN NUMBER(4);
    begin
        CH1:='DE001';
     
      SELECT S_C_K.NEXTVAL 
           INTO NN
           FROM DUAL;
     
      CT := :NEW.C_H_ART ;
     
      CT:=SUBSTR(CT,1,2);
     
      IF CT= 'NB' THEN
          CH2:='WL';
       ELSIF CT = 'PC' THEN  
         CH2:='WD';
       ELSIF CT= 'SV' THEN 
         CH2:='WS';
       ELSIF CT= 'WS' THEN
         CH2:='WC';
       ELSE RAISE_APPLICATION_ERROR(-20010, 'the type of computer is not existing, existings type : laptop, cad, desktop, server');
     
      END IF;
     
     CH3:=CONCAT(CH1,CH2);
     :NEW.C_NR := CH3||LPAD(NN,4,'0');
    end;
    La chose que je n'ai pas encore compris est que la séquence reste toujours à sa valeur initiale, bien que NEXTVAL soit situé au début du code (la séquence va de 4000 à 9999).

    La table Computer est la suivante :
    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
    CREATE TABLE  "COMPUTER" 
       (	"C_NR" VARCHAR2(5), 
    	"C_USER" VARCHAR2(5), 
    	"C_H_ART" VARCHAR2(10), 
    	"C_TYP" VARCHAR2(20), 
    	"C_HERST" VARCHAR2(20), 
    	"C_LIEF" VARCHAR2(20), 
    	"C_PREIS" NUMBER, 
    	"C_BEZ" VARCHAR2(25) NOT NULL DISABLE, 
    	"C_SERI" VARCHAR2(25), 
    	"C_CPU" VARCHAR2(20), 
    	"C_RAM" VARCHAR2(20), 
    	"C_FP" VARCHAR2(40), 
    	"C_LIEF_DAT" DATE, 
    	"C_FREIGAB_NR" VARCHAR2(20), 
    	"C_BEST_NR" VARCHAR2(20), 
    	"C_BEM" VARCHAR2(500), 
    	"C_BEST_DAT" DATE, 
    	"C_FREIGAB_DAT" DATE, 
    	"C_RAUM" NUMBER, 
    	"IP_ADR" VARCHAR2(15), 
    	"SUB_NETZ" NUMBER, 
    	"MAC_ADR" VARCHAR2(25), 
    	 CONSTRAINT "COMPUTER_PK" PRIMARY KEY ("C_NR") ENABLE
       )
    /
    ALTER TABLE  "COMPUTER" ADD CONSTRAINT "COMPUTER_FK2" FOREIGN KEY ("C_USER")
    	  REFERENCES  "Users" ("U_NR") ENABLE
    /
    ALTER TABLE  "COMPUTER" ADD CONSTRAINT "COMPUTER_FK3" FOREIGN KEY ("C_H_ART")
    	  REFERENCES  "C_HW" ("CH_ART") ENABLE
    /
    Les tables Users et C_HW desquelles dépendent la table computer sont déjà peuplées.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Il est compilé le trigger ?
    Il me semble qu'il n'y a pas de DECLARE dans un trigger.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 39
    Par défaut
    Citation Envoyé par McM Voir le message
    Il est compilé le trigger ?
    Il me semble qu'il n'y a pas de DECLARE dans un trigger.
    Oui il est compilé avec succès.

    Pour le DECLARE, j'ai déjà essayé et ça marche à 100%.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 39
    Par défaut
    Le problème est résolu.

    Il était au niveau de la variable C_NR qui était un varchar2(5), mais la valeur qu'on lui affectait dans le trigger est de longueur 11.

    Merci à tous ceux qui ont essayé de lire ou de répondre à ce sujet.

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Houla, mais j'ai fumé moi !!
    Heureusement, tu l'as résolu tout seul

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    La table DUAL, arrgghhh !
    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT S_C_K.NEXTVAL INTO NN
      FROM DUAL;
    Par :

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Pas possible en pl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE
    	v number;
    BEGIN
      v := S_LOT_DEMAT.NEXTVAL;
      DBMS_OUTPUT.put_line('Séquence:'|| v);
    END;
     
     
    ORA-06550: line 4, column 20:
    PLS-00357: Table,View Or Sequence reference 'S_LOT_DEMAT.NEXTVAL' not allowed in this context
    ORA-06550: line 4, column 3:
    PL/SQL: Statement ignored

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 27/04/2011, 16h00
  2. Réponses: 1
    Dernier message: 18/08/2010, 09h51
  3. Réponses: 6
    Dernier message: 22/03/2010, 15h07
  4. Réponses: 0
    Dernier message: 12/08/2008, 17h12
  5. erreur à la création d'une clé primaire
    Par dams78 dans le forum SQL
    Réponses: 1
    Dernier message: 11/01/2008, 11h25

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