Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: declare variable in trigger
thanks,
I have posted trigger only to simplify an example.
as example firebird trigger like this.
variable of CARI_ISLEM_NO same as field name.
CREATE TRIGGER CARIISKA_BI FOR CARIISKA
BEFORE INSERT POSITION 100
AS
DECLARE VARIABLE CARI_BAGLANTI_NO1 INTEGER;
DECLARE VARIABLE CARI_BAGLANTI_NO2 INTEGER;
DECLARE VARIABLE VADE1 DATE;
DECLARE VARIABLE VADE2 DATE;
DECLARE VARIABLE BAKIYE1 DOUBLE PRECISION;
DECLARE VARIABLE BAKIYE2 DOUBLE PRECISION;
DECLARE VARIABLE KAPANMA1 DOUBLE PRECISION;
DECLARE VARIABLE KAPANMA2 DOUBLE PRECISION;
DECLARE VARIABLE KAPANIR1 CHAR(1);
DECLARE VARIABLE KAPANIR2 CHAR(1);
DECLARE VARIABLE FIRMA_NO1 INTEGER;
DECLARE VARIABLE FIRMA_NO2 INTEGER;
DECLARE VARIABLE KUR_TIP_NO1 INTEGER;
DECLARE VARIABLE KUR_TIP_NO2 INTEGER;
DECLARE VARIABLE DOVIZ_BIRIMI1 VARCHAR(4);
DECLARE VARIABLE DOVIZ_BIRIMI2 VARCHAR(4);
DECLARE VARIABLE TARIH1 TIMESTAMP;
DECLARE VARIABLE TARIH2 TIMESTAMP;
DECLARE VARIABLE VIRMAN_CARI_ISLEM_NO INTEGER;
DECLARE VARIABLE CARI_ISLEM_NO INTEGER; -- this variable name same as
field name
DECLARE VARIABLE KUR1 DOUBLE PRECISION;
DECLARE VARIABLE KUR2 DOUBLE PRECISION;
DECLARE VARIABLE TARIH TIMESTAMP;
BEGIN
IF(USER <> 'REPL') THEN
BEGIN
IF(NOT EXISTS(SELECT 1 FROM CARIISLM WHERE CARI_ISLEM_NO =
NEW.CARI_ISLEM_NO)) THEN
EXCEPTION "FLYEXCEPTION" _NONE 'Cari işlem kaydı veya kullanım
yetkisi yok. CariIslemNo: ' || COALESCE(NEW.CARI_ISLEM_NO, '<NULL>');
IF(NEW.TUTAR < 0) THEN
EXCEPTION "FLYEXCEPTION" _NONE 'Kapatma tutarı negatif olamaz.
CariIslemNo: ' || NEW.CARI_ISLEM_NO;
SELECT I.CARI_BAGLANTI_NO, I.KAPANIR, I.VADE_TARIHI, I.BAKIYE, I.KAPANMA, N.FIRMA_NO, I.DOVIZ_BIRIMI, I.TARIH, I.DOVIZ_KURU, I.KUR_TIP_NO FROM CARIISLM I LEFT JOIN ISLMNOKT N ON N.ISLEM_NOKTASI_NO = I.ISLEM_NOKTASI_NO WHERE I.CARI_ISLEM_NO = NEW.CARI_ISLEM_NO INTO :CARI_BAGLANTI_NO1, :KAPANIR1, :VADE1, :BAKIYE1, :KAPANMA1, :FIRMA_NO1, :DOVIZ_BIRIMI1, :TARIH1, :KUR1, :KUR_TIP_NO1; SELECT I.CARI_BAGLANTI_NO, I.KAPANIR, I.VADE_TARIHI, I.BAKIYE, I.KAPANMA, N.FIRMA_NO, I.DOVIZ_BIRIMI, I.TARIH, I.DOVIZ_KURU, I.KUR_TIP_NO FROM CARIISLM I LEFT JOIN ISLMNOKT N ON N.ISLEM_NOKTASI_NO = I.ISLEM_NOKTASI_NO WHERE I.CARI_ISLEM_NO = NEW.KAPANAN_CARI_ISLEM_NO INTO :CARI_BAGLANTI_NO2, :KAPANIR2, :VADE2, :BAKIYE2, :KAPANMA2, :FIRMA_NO2, :DOVIZ_BIRIMI2, :TARIH2, :KUR2, :KUR_TIP_NO2;
IF(FIRMA_NO1 <> FIRMA_NO2) THEN
BEGIN
IF(CURRENT_ROLE = 'DEVELOPER') THEN
BEGIN
EXECUTE PROCEDURE DEBUGTEXT('File: trigcari.sql, Line: 318');
EXECUTE PROCEDURE DEBUGTEXT('NEW.CARI_ISLEM_NO || ''-'' ||
NEW.KAPANAN_CARI_ISLEM_NO : ' || CASE WHEN NEW.CARI_ISLEM_NO || '-' ||
NEW.KAPANAN_CARI_ISLEM_NO IS NULL THEN 'NULL' ELSE NEW.CARI_ISLEM_NO ||
'-' || NEW.KAPANAN_CARI_ISLEM_NO END);
EXECUTE PROCEDURE DEBUGTEXT('StackTrace: ' || StackTrace());
END IF(CURRENT_ROLE = 'DEVELOPER') THEN BEGIN EXECUTE PROCEDURE DEBUGTEXT('File: trigcari.sql, Line: 319'); EXECUTE PROCEDURE DEBUGTEXT('FIRMA_NO1 || ''-'' || FIRMA_NO2 :' || CASE WHEN FIRMA_NO1 || '-' || FIRMA_NO2 IS NULL THEN 'NULL' ELSE FIRMA_NO1 || '-' || FIRMA_NO2 END);
END EXCEPTION "FLYEXCEPTION" _NONE 'Farklı firma cari işlemleribirbiri ile kapatılamaz';
END IF(CARI_BAGLANTI_NO1 <> 0 AND CARI_BAGLANTI_NO2 <> 0 AND CARI_BAGLANTI_NO1 <> CARI_BAGLANTI_NO2) THEN
BEGIN
IF(CURRENT_ROLE = 'DEVELOPER') THEN
BEGIN
EXECUTE PROCEDURE DEBUGTEXT('File: trigcari.sql, Line: 325');
EXECUTE PROCEDURE DEBUGTEXT('NEW.CARI_ISLEM_NO || ''-'' ||
NEW.KAPANAN_CARI_ISLEM_NO : ' || CASE WHEN NEW.CARI_ISLEM_NO || '-' ||
NEW.KAPANAN_CARI_ISLEM_NO IS NULL THEN 'NULL' ELSE NEW.CARI_ISLEM_NO ||
'-' || NEW.KAPANAN_CARI_ISLEM_NO END);
EXECUTE PROCEDURE DEBUGTEXT('StackTrace: ' || StackTrace());
END IF(CURRENT_ROLE = 'DEVELOPER') THEN BEGIN EXECUTE PROCEDURE DEBUGTEXT('File: trigcari.sql, Line: 326'); EXECUTE PROCEDURE DEBUGTEXT('CARI_BAGLANTI_NO1 || ''-'' || CARI_BAGLANTI_NO2 : ' || CASE WHEN CARI_BAGLANTI_NO1 || '-' ||CARI_BAGLANTI_NO2 IS NULL THEN 'NULL' ELSE CARI_BAGLANTI_NO1 || '-' || CARI_BAGLANTI_NO2 END);
END EXCEPTION "FLYEXCEPTION" _NONE 'Farklı Cari Bağlantılara aitişlemler birbirini kapatamaz';
END
IF(BAKIYE1 * BAKIYE2 > 0) THEN
BEGIN
IF(CURRENT_ROLE = 'DEVELOPER') THEN
BEGIN
EXECUTE PROCEDURE DEBUGTEXT('File: trigcari.sql, Line: 332');
EXECUTE PROCEDURE DEBUGTEXT('NEW.CARI_ISLEM_NO || ''-'' ||
NEW.KAPANAN_CARI_ISLEM_NO : ' || CASE WHEN NEW.CARI_ISLEM_NO || '-' ||
NEW.KAPANAN_CARI_ISLEM_NO IS NULL THEN 'NULL' ELSE NEW.CARI_ISLEM_NO ||
'-' || NEW.KAPANAN_CARI_ISLEM_NO END);
EXECUTE PROCEDURE DEBUGTEXT('StackTrace: ' || StackTrace());
END IF(CURRENT_ROLE = 'DEVELOPER') THEN BEGIN EXECUTE PROCEDURE DEBUGTEXT('File: trigcari.sql, Line: 333'); EXECUTE PROCEDURE DEBUGTEXT('BAKIYE1 || ''-'' || BAKIYE2 : ' ||CASE WHEN BAKIYE1 || '-' || BAKIYE2 IS NULL THEN 'NULL' ELSE BAKIYE1 || '-' || BAKIYE2 END);
END EXCEPTION "FLYEXCEPTION" _NONE 'Bakiyeleri aynı yönlühareketler birbirini kapatamaz';
END
IF(KAPANIR1 <> 'E' OR KAPANIR2 <> 'E') THEN
BEGIN
IF(CURRENT_ROLE = 'DEVELOPER') THEN
BEGIN
EXECUTE PROCEDURE DEBUGTEXT('File: trigcari.sql, Line: 339');
EXECUTE PROCEDURE DEBUGTEXT('NEW.CARI_ISLEM_NO || ''-'' ||
NEW.KAPANAN_CARI_ISLEM_NO : ' || CASE WHEN NEW.CARI_ISLEM_NO || '-' ||
NEW.KAPANAN_CARI_ISLEM_NO IS NULL THEN 'NULL' ELSE NEW.CARI_ISLEM_NO ||
'-' || NEW.KAPANAN_CARI_ISLEM_NO END);
EXECUTE PROCEDURE DEBUGTEXT('StackTrace: ' || StackTrace());
END IF(CURRENT_ROLE = 'DEVELOPER') THEN BEGIN EXECUTE PROCEDURE DEBUGTEXT('File: trigcari.sql, Line: 340'); EXECUTE PROCEDURE DEBUGTEXT('KAPANIR1 || ''-'' || KAPANIR2 : '|| CASE WHEN KAPANIR1 || '-' || KAPANIR2 IS NULL THEN 'NULL' ELSE KAPANIR1 || '-' || KAPANIR2 END);
END EXCEPTION "FLYEXCEPTION" _NONE 'KAPANIR ''E'' olmayan hareketlerbirbirini kapatamaz';
END
IF(DOVIZ_BIRIMI1 <> DOVIZ_BIRIMI2) THEN
BEGIN
SELECT BitOr(BitShl(DB_ID,24),GEN_ID(CARI_ISLEM_NO,1)) FROM
FLYSYSTEM INTO :CARI_ISLEM_NO;
TARIH = CASE WHEN TARIH1 < TARIH2 THEN TARIH2 ELSE TARIH1 END; IF(NEW.TUTAR > Abs(BAKIYE1 - KAPANMA1)) THEN NEW.TUTAR = Abs(BAKIYE1 - KAPANMA1); IF (TARIH1 < TARIH2) THEN SELECT KUR FROM DOVIZ_KURUBUL(:TARIH, :DOVIZ_BIRIMI1,:KUR_TIP_NO1) INTO :KUR1;
IF (TARIH1 > TARIH2) THEN SELECT KUR FROM DOVIZ_KURUBUL(:TARIH, :DOVIZ_BIRIMI2,:KUR_TIP_NO2) INTO :KUR2;
IF(NEW.TUTAR > Abs(BAKIYE2 - KAPANMA2) * KUR2 / KUR1) THEN NEW.TUTAR = Abs(BAKIYE2 - KAPANMA2) * KUR2 / KUR1; INSERT INTO CARIISLM(CARI_ISLEM_NO, CARI_NO, CARI_ALT_NO, ISLEM_KODU, ISLEM_ADI, TARIH, VADE_TARIHI, ACIKLAMA, ODEME_ARACI, KUR_TIP_NO, BORC, ALACAK, DOVIZ_BIRIMI, DOVIZ_KURU, KAPANIR, XMODUL, TICARI_DEGER, ISLEM_NOKTASI_NO, PERSONEL_NO, USER_ID, GROUP_ID, ROGROUP_ID, SECURITY, SYSTEM) SELECT :CARI_ISLEM_NO, CARI_NO, CARI_ALT_NO, 'VİRMAN', 'Virman', :TARIH, VADE_TARIHI, 'Döviz Virman', 'Nakit', KUR_TIP_NO, CASE WHEN ALACAK > 0 THEN NEW.TUTAR ELSE 0 END, CASE WHEN BORC > 0 THEN NEW.TUTAR ELSE 0 END, DOVIZ_BIRIMI, :KUR1, 'E', 'C', 'H', ISLEM_NOKTASI_NO, PERSONEL_NO, USER_ID, GROUP_ID, ROGROUP_ID, SECURITY, 'E' FROM CARIISLM WHERE CARI_ISLEM_NO = NEW.CARI_ISLEM_NO; SELECT INTERNAL FROM CARIISLM WHERE CARI_ISLEM_NO = :CARI_ISLEM_NO /**** this is variable *****/ INTO :VIRMAN_CARI_ISLEM_NO; UPDATE CARIISLM SET DOVIZ_BIRIMI = :DOVIZ_BIRIMI2, KUR_TIP_NO = :KUR_TIP_NO2, DOVIZ_KURU = :KUR2, BORC = CASE WHEN BORC > 0 THEN NEW.TUTAR * :KUR1 / :KUR2 ELSE 0 END, ALACAK = CASE WHEN ALACAK > 0 THEN NEW.TUTAR * :KUR1 / :KUR2 ELSE 0 END WHERE CARI_ISLEM_NO = :VIRMAN_CARI_ISLEM_NO; INSERT INTO "CARIISKA"(CARI_ISLEM_NO, KAPANAN_CARI_ISLEM_NO, TUTAR, DOVIZ_VIRMAN) VALUES(NEW.KAPANAN_CARI_ISLEM_NO,:VIRMAN_CARI_ISLEM_NO, NEW.TUTAR * :KUR1 / :KUR2 , 'E');
NEW.KAPANAN_CARI_ISLEM_NO = CARI_ISLEM_NO; NEW.DOVIZ_VIRMAN = 'E';
WHERE KAPANAN_CARI_ISLEM_NO = NEW.CARI_ISLEM_NO AND CARI_ISLEM_NO = NEW.KAPANAN_CARI_ISLEM_NO))THEN
IF(NEW.TUTAR > Abs(BAKIYE1 - KAPANMA1)) THEN NEW.TUTAR = Abs(BAKIYE1 - KAPANMA1); IF(NEW.TUTAR > Abs(BAKIYE2 - KAPANMA2)) THEN NEW.TUTAR = Abs(BAKIYE2 - KAPANMA2);END NEW.YAS = VADE1 - VADE2;
>