Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Homme Profil pro Dual Tech
    Développeur informatique
    Inscrit en
    mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Nom : Homme Dual Tech
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2012
    Messages : 15
    Points : 3
    Points
    3

    Par défaut Trigger PRIMARY KEY ne fonctionne pas

    Quelqu’un me dit pou quoi les Trigger des PRIMARY KEY ne fonctionnent pas même sur IBCONSOL
    Voila ma table
    Code sql :
    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
     
    CREATE DOMAIN "AUTO_INC" AS INTEGER;
    CREATE DOMAIN "CAR_COURT" AS VARCHAR(30);
    CREATE DOMAIN "HEURE" AS TIME;
    CREATE DOMAIN "LA_DATE" AS DATE;
    CREATE DOMAIN "MONNAIE" AS NUMERIC(15, 2)
    	 DEFAULT 0;
    CREATE DOMAIN "NOTE" AS VARCHAR(300);
    CREATE DOMAIN "NUMERO" AS INTEGER
    	 DEFAULT 0;
    CREATE DOMAIN "UN_CAR" AS VARCHAR(1);
     
    CREATE TABLE "PROFORMA" 
    (
      "ID_PROFORMA"	"AUTO_INC" NOT NULL,
      "CODE_MODE_PAIEMENT"	"UN_CAR",
      "USERNAME"	"CAR_COURT",
      "CODE_OPERATEUR"	VARCHAR(10),
      "NUM_PROFORMA"	"NUMERO",
      "DATE_PROFORMA"	"LA_DATE",
       "HEURE_PROFORMA"	"HEURE",
      "OBS_PROFORMA"	"NOTE",
      "CLOS_PROFORMA"	"UN_CAR",
      "TYPE_PRIX_PROFORMA"	"UN_CAR",
    CONSTRAINT "PK_PROFORMA" PRIMARY KEY ("ID_PROFORMA"));
    Voila le Trigger qui fonctionne correctement
    Code sql :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SET  TERM ^ ;
    CREATE TRIGGER "INSERTION_PROFORMA" FOR "PROFORMA" 
    ACTIVE BEFORE INSERT POSITION 0
    AS
    declare variable num_proforma integer;
    begin
         IF (new.ID_PROFORMA IS NULL) then
         new.ID_PROFORMA = GEN_ID(S_PROFORMA, 1);
         IF (new.date_proforma IS NULL) then new.date_proforma = 'today';
         IF (new.heure_proforma IS NULL) then new.heure_proforma = 'now';
         SELECT max(num_proforma) FROM proforma
           WHERE num_proforma BETWEEN ((extract(year FROM new.date_proforma)) * 10000 + 1) AND
                                      ((extract(year FROM new.date_proforma)) * 10000 + 9999)
         INTO :num_proforma;
         IF (:num_proforma IS NULL) then
         new.num_proforma = ((extract(year FROM new.date_proforma)) * 10000 + 1);
         else new.num_proforma = :num_proforma + 1;
    end
     ^
    enfin le trigger qui ne fonctionne pas

    Code sql :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER "TI_PROFORMA" FOR "PROFORMA" 
    ACTIVE BEFORE INSERT POSITION 0
    AS
    declare variable numrows integer;
    begin
          IF (new.ID_PROFORMA IS NULL) then
         new.ID_PROFORMA = GEN_ID(S_PROFORMA, 1);
    end
     ^
    merci a tous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 625
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 625
    Points : 13 669
    Points
    13 669

    Par défaut

    Que signifie qu'il ne fonctionne pas ?
    Il y a une erreur de compilation ? Une erreur d'exécution ? Un résultat qui n'est pas celui attendu ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Invité de passage
    Homme Profil pro Dual Tech
    Développeur informatique
    Inscrit en
    mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Nom : Homme Dual Tech
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2012
    Messages : 15
    Points : 3
    Points
    3

    Par défaut

    Merci al1_24 pour ta réponse
    Ne fonctionne pas signifie que les Triggers n’ajouter pas les valeurs au PRIMARY KEY depuis le générateur
    Mais avec les d'autre champs (NoN PRIMARY KEY) se dernier fonctionne
    Voila la commande
    Code sql :
    1
    2
    IF (new.ID_PROFORMA IS NULL) then
         new.ID_PROFORMA = GEN_ID(S_PROFORMA, 1);

  4. #4
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 393
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 393
    Points : 10 562
    Points
    10 562

    Par défaut

    si par
    n’ajouter pas les valeurs au PRIMARY KEY depuis le générateur
    il faut comprendre "ne modifie pas la valeur du champ défini comme PRIMARY KEY" il faudrait peut être déjà vérifié que la valeur de new.ID_PROFORMA soit bien nulle vant d'affirmer que le trigger ne fonctionne pas .

    un simple test avec un Insert en désactivant le TRIGGER "INSERTION_PROFORMA" , et sans indiquer de valeur a ID_PROFORMA devrait le vérifier

    Code par exemple :
    1
    2
     
    INSERT INTO PROFORMA(CODE_OPERATEUR) VALUES ('TEST')
    bien sur ce code suppose qu'il n'y a aucune contraintes
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  5. #5
    Invité de passage
    Homme Profil pro Dual Tech
    Développeur informatique
    Inscrit en
    mai 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Nom : Homme Dual Tech
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2012
    Messages : 15
    Points : 3
    Points
    3

    Par défaut

    Merci SergioMaster mais je n’ai pas compris
    Est-ce qu' il ya une méthode professionnelle pour rempiler les ID depuis les générateur ?

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
  •