PB à toute heure et à tout moment. (à parcourir avec modération)

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 21-04-2017 09:39:52

Saria  
Membre Geek
Lieu: Lille
Date d'inscription: 24-02-2012
Messages: 25
Pépites: 117
Banque: 0

[RESOLU] [DB2] Trigger qui appelle procédure stockée ?

Bonjour,

J'ai un back-office codé en PB, avec une base de données DB2.
A chaque fois qu'on veut insérer une ligne en base, dans le code de notre logiciel en PB :
- on déclare une variable
- on appelle une procédure stockée, qui nous génère / réserve un identifiant.
- on stocke le résultat de la procédure dans la variable
- on fait un setitem avec la variable dans la datawindow
- on update la datawindow


A côté de ça, j'ai un Web Service, codé en .NET, qui utilise la même base de données.
Il insère des lignes dans des tables qui sont propres au Web Service.
Un trigger vient alimenter les tables du back-office (pour que les données soient visibles dans le back-office).

Seulement, mon WS ne passe pas par la procédure stockée pour générer l'identifiant en création de ligne.
Et hier soir, le WS et le back-office se sont téléscopés.
Ils ont tous deux voulu insérer une ligne avec le même identifiant (le WS n'étant pas passé par la procédure stockée pour réserver l'identifiant).
Erreur côté back-office "clé primaire déjà utilisée", traitement planté.

Je cherche donc à modifier mon trigger, en appelant la même procédure stockée que côté back-office, pour ne plus que le WS et le back-office se marchent dessus.


Je n'arrive pas à récupérer le résultat de la procédure stockée, et à le donner dans l'insertion pour le trigger.
J'ai cherché sur le Net, je ne trouve pas la syntaxe.
J'ai fait plusieurs essais, non concluants...


KO :

Code: sql

CREATE TRIGGER Create_truc_machin
AFTER INSERT ON table_ws
REFERENCING NEW AS post
FOR EACH ROW
BEGIN ATOMIC  
  INSERT INTO table_backoff (
    colonne1, colonne2, colonne_id, colonne4, ...
  )
  VALUES (
    post.ws_colonne1, post.ws_colonne2, call proc_ide('table_backoff'), post.ws_colonne4, ...
  );
END|

KO aussi :

Code: sql

CREATE TRIGGER Create_truc_machin
AFTER INSERT ON table_ws
REFERENCING NEW AS post
FOR EACH ROW
BEGIN ATOMIC  
  INSERT INTO table_backoff  (
    colonne1, colonne2, colonne_id, colonne4, ...
  )
  VALUES (
    post.ws_colonne1, post.ws_colonne2, proc_ide('table_backoff'), post.ws_colonne4, ...
  );
END|

KO aussi :

Code: sql

CREATE TRIGGER Create_truc_machin
AFTER INSERT ON table_ws
REFERENCING NEW AS post
FOR EACH ROW
BEGIN ATOMIC

  DECLARE var_compteur int;
  var_compteur = call PROC_IDE('table_backoff');
  
  INSERT INTO table_backoff (
    colonne1, colonne2, colonne_id, colonne4, ...
  )
  VALUES (
    post.ws_colonne1, post.ws_colonne2, var_compteur, post.ws_colonne4, ...
  );
END|

KO aussi :

Code: sql

CREATE TRIGGER Create_truc_machin
AFTER INSERT ON table_ws
REFERENCING NEW AS post
FOR EACH ROW
BEGIN ATOMIC

  DECLARE var_compteur int;
  var_compteur = PROC_IDE('table_backoff');
  
  INSERT INTO table_bo (
    colonne1, colonne2, colonne_id, colonne4, ...
  )
  VALUES (
    post.ws_colonne1, post.ws_colonne2, var_compteur, post.ws_colonne4, ...
  );
END|

Si quelqu'un connaît la solution / syntaxe pour appeler des procédures stockées dans des triggers en DB2, je suis preneuse.

Merci d'avance.

Dernière modification par Saria (21-04-2017 09:51:16)

Hors ligne

 

#2 21-04-2017 09:47:41

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] [DB2] Trigger qui appelle procédure stockée ?

Bonjour,

Messages d'erreur ?

Quelle version de DB2, car :

CALL in Trigger is a DB2 V8.2 feature


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 21-04-2017 09:50:48

Saria  
Membre Geek
Lieu: Lille
Date d'inscription: 24-02-2012
Messages: 25
Pépites: 117
Banque: 0

Re: [RESOLU] [DB2] Trigger qui appelle procédure stockée ?

Au temps pour moi, j'avais oublié de préciser : DB2 V9.

Finalement, j'ai trouvé...
https://www.ibm.com/support/knowledgece … 11377.html

Code: sql

CREATE TRIGGER Create_truc_machin
AFTER INSERT ON table_ws
REFERENCING NEW AS post
FOR EACH ROW
BEGIN ATOMIC

  DECLARE var_compteur INTEGER DEFAULT 0;
  call PROC_IDE('table_backoff');
  GET DIAGNOSTICS var_compteur = RETURN_STATUS;
  
  INSERT INTO table_bo (
    colonne1, colonne2, colonne_id, colonne4, ...
  )
  VALUES (
    post.ws_colonne1, post.ws_colonne2, var_compteur, post.ws_colonne4, ...
  );
END|

Je vais toper le sujet en Résolu.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22