Trigger
sdrogba
Messages postés
66
Date d'inscription
Statut
Membre
Dernière intervention
-
sdrogba Messages postés 66 Date d'inscription Statut Membre Dernière intervention -
sdrogba Messages postés 66 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Etant donné que ce n'est pas une solution que je suis amené à utiliser souvent je ne me rapelle plus trop de la synthaxe à utiliser pour un trigger.
Celui ci doit mettre une date dans la table bkizcprt à chaque insert ou update de cette même table.
Il s'avère que je sais même pas où se trouve les erreurs mais je sais qu'il y en a.
De plus, ma procédure retourne NEW cependant je ne sais pas si pour lui cela implémente la nouvelle zone avant de faire l'INSERT ou l'UPDATE et si oracle comprend qu'il faut bien le prendre en compte dans l'action qu'il est entrain de faire.
Si une âme charitable passe dans le coin svp...
Merci d'avance
Etant donné que ce n'est pas une solution que je suis amené à utiliser souvent je ne me rapelle plus trop de la synthaxe à utiliser pour un trigger.
Celui ci doit mettre une date dans la table bkizcprt à chaque insert ou update de cette même table.
CREATE FUNCTION Affectation_date() RETURNS trigger AS INS_UPD_bkizcprt$ufdbki DECLARE f_sit_cent CHAR(5) ; f_date_comptable1 CHAR(8) ; f_date_comptable2 CHAR(8) ; BEGIN NEW.date_dermodif := current_timestamp; -- Recherche du site central SELECT MNT1 INTO f_sit_cent FROM BKNOM WHERE CTAB = '098' AND CACC = 'CENT'; IF f_sit_cent IS NOT NULL THEN -- Recherche de la date comptable SELECT MNT1, MNT2 INTO f_date_comptable1, f_date_comptable2 FROM BKNOM WHERE CTAB = '001' AND CACC = f_sit_cent AND AGE = f_sit_cent; -- Quelle est la bonne date comptable ? IF f_date_comptable2 IS NULL THEN NEW.date_dermodif := f_date_comptable1; ELSE NEW.date_dermodif := f_date_comptable2; END IF END IF RETURN NEW; END; INS_UPD_bkizcprt$ufdbki LANGUAGE plpgsql; CREATE TRIGGER INS_UPD_bkizcprt$ufdbki BEFORE INSERT OR UPDATE ON BKIZCPRT FOR EACH ROW EXECUTE PROCEDURE Affectation_date(); SHOW errors; exit;
Il s'avère que je sais même pas où se trouve les erreurs mais je sais qu'il y en a.
De plus, ma procédure retourne NEW cependant je ne sais pas si pour lui cela implémente la nouvelle zone avant de faire l'INSERT ou l'UPDATE et si oracle comprend qu'il faut bien le prendre en compte dans l'action qu'il est entrain de faire.
Si une âme charitable passe dans le coin svp...
Merci d'avance
A voir également:
- Trigger
- Assistant trigger - Guide
1 réponse
J'avance sur mes problèmes le code est devenu ça :
Cependant j'ai réussit à determiner des erreurs les voicis :
7/10 PL/SQL: SQL Statement ignored
8/10 PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement
Une idée ?
CREATE OR REPLACE TRIGGER INS_UPD_bkizcprt AFTER INSERT OR UPDATE ON BKIZCPRT FOR EACH ROW DECLARE f_sit_cent CHAR(5) := '99000'; f_date_comptable1 CHAR(8) := '02011900'; f_date_comptable2 CHAR(8) := '02011900'; CURSOR cur_bkizcprt IS SELECT * FROM bkizcprt AND age = :OLD.age AND ope = :OLD.ope AND eve = :OLD.eve AND ave = :OLD.ave AND iden = :OLD.iden AND lang = :OLD.lang; f_bkizcprt cur_bkizcprt%ROWTYPE; CURSOR cur_sit_cent IS SELECT MNT1 FROM BKNOM WHERE CTAB = '098' AND CACC = 'SITE-CENT'; CURSOR cur_date_comptable IS SELECT MNT1, MNT2 FROM BKNOM WHERE CTAB = '001' AND CACC = f_sit_cent AND AGE = f_sit_cent; BEGIN OPEN cur_bkizcprt; FETCH cur_bkizcprt INTO f_bkizcprt; IF cur_bkizcprt%FOUND THEN -- Recherche du site central OPEN cur_sit_cent; FETCH cur_sit_cent INTO f_sit_cent; IF cur_sit_cent%FOUND THEN -- Recherche de la date comptable OPEN cur_date_comptable; FETCH cur_date_comptable INTO f_date_comptable1, f_date_comptable2; IF cur_date_comptable%FOUND THEN -- Quelle est la bonne date comptable ? IF f_date_comptable2 IS NULL THEN :NEW.date_dermodif := f_date_comptable1; ELSE :NEW.date_dermodif := f_date_comptable2; END IF; END IF; END IF; UPDATE bkizcprt SET date_dermodif = to_date(:NEW.date_dermodif) --Date de modifcation WHERE age = :OLD.age AND ope = :OLD.ope AND eve = :OLD.eve AND ave = :OLD.ave AND iden = :OLD.iden AND lang = :OLD.lang ; END IF; END; / SHOW errors; exit;
Cependant j'ai réussit à determiner des erreurs les voicis :
7/10 PL/SQL: SQL Statement ignored
8/10 PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement
Une idée ?