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 Firebird Discussion :

Récuperer une 2eme fois l'identifiant depuis une vue


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut Récuperer une 2eme fois l'identifiant depuis une vue
    Bonjour à tous et bonne année 2011,


    Lors de l'insertion dans une vue multi-table je récupère l'identifiant d'une table pour l'insérer dans une autre table :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE OR ALTER TRIGGER V_LIGNE_COMMANDE_AI0 FOR V_LIGNE_COMMANDE
    ACTIVE AFTER INSERT POSITION 0
    AS
    declare LigneID BIGINT;
    begin
      insert into tb_commande_ligne (commande_id,taux_remise,taux_taxe,accepted)
      values (new.commande_id, new.taux_remise, new.taux_taxe,new.accepted)RETURNING LIGNE_ID into : LigneID;
     
      insert into st_tb_ligne (Ligne_id,Ligne_qte,ligne_pu,art_id)
      values (:LigneID,new.ligne_qte,new.ligne_pu,new.art_id);
    end

    Jusque là ça fonctionne bien.

    L'appel de l'Insert se fait dans une procédure stockée :
    Code SQL : 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
     
     insert into v_ligne_commande
      (commande_id,
       taux_remise,
       taux_taxe,
       accepted,
       ligne_qte,
       ligne_pu,
       art_id)
     
      values
       (:commande_id,
        :taux_remise,
        :taux_taxe,
        :accepted,
        :ligne_qte,
        :ligne_pu,
        :art_id) returning ligne_id into :IDLIGNE;

    J'essaye de faire un 2eme RETURNING pour récupérer le LIGNE_ID dans le IDLIGNE mais il semblerais que ca ne fonctionne pas (valeur NULL).
    J'aimerais savoir si il n' y a pas un autre moyen de le faire autre que :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select gen_id(NOM_GENERATEUR, 1)
    from rdb$database
    into :IDLIGNE ;


    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Bonjour et bonne année également :p

    La clause returning ne vois pas les changements fait par les triggers after.

    Ceci explique peut être cela :p

  3. #3
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    aie !!!
    changement de méthode alors.....
    Merci Barbibulle

  4. #4
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Ceci dit je ne sais pas si sur une vue ca fonctionne la recup d'ID avec returning.

    Ce que je ferais moi c'est :
    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
     
    CREATE OR ALTER TRIGGER V_LIGNE_COMMANDE_AI0 FOR V_LIGNE_COMMANDE
    ACTIVE BEFORE INSERT POSITION 0
    AS
     
    begin
      if (new.LIGNE_ID is null) then
        new.LIGNE_ID = gen_id(gen_tb_commande_ligne_id,1);
     
      INSERT INTO tb_commande_ligne (LIGNE_ID, commande_id,taux_remise,taux_taxe,accepted)
      VALUES (new.LIGNE_ID, new.commande_id, new.taux_remise, new.taux_taxe,new.accepted);
     
      INSERT INTO st_tb_ligne (Ligne_id,Ligne_qte,ligne_pu,art_id)
      VALUES (new.LIGNE_ID,new.ligne_qte,new.ligne_pu,new.art_id);
    end
    et dans la PS
    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
    LIGNE_ID = gen_id(gen_tb_commande_ligne_id,1);
     
    INSERT INTO v_ligne_commande
      (LIGNE_ID,
       commande_id,
       taux_remise,
       taux_taxe,
       accepted,
       ligne_qte,
       ligne_pu,
       art_id)
     
      VALUES
       (:LIGNE_ID
        :commande_id,
        :taux_remise,
        :taux_taxe,
        :accepted,
        :ligne_qte,
        :ligne_pu,
        :art_id);

  5. #5
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Le problème c'est que j'avais codé cela :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IF (new.LIGNE_ID IS NULL) then
        new.LIGNE_ID = gen_id(gen_tb_commande_ligne_id,1);

    dans les triggers BEFORE INSERT dans pratiquement toutes les tables de détail
    (tb_commande_ligne,tb_devis_ligne, etc...)
    Mais je vais essayer votre méthode en déplaçant le code.

    Merci.

  6. #6
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Pardon, c'est un seul générateur qui est appelé dans toutes les tables de détail
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     IF (NEW.ligne_id IS NULL) then
     NEW.ligne_id  = GEN_ID(gen_tb_ligne,1);

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

Discussions similaires

  1. Diapo automatique depuis une 2eme source
    Par municipum dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 23/01/2014, 11h27
  2. executer une commande sur un serveur depuis une page web
    Par nico33410 dans le forum Général Conception Web
    Réponses: 12
    Dernier message: 21/04/2007, 19h02
  3. Réponses: 1
    Dernier message: 31/10/2006, 11h15
  4. Réponses: 2
    Dernier message: 07/02/2005, 16h43
  5. Réponses: 4
    Dernier message: 16/09/2003, 10h51

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