CREATE OR REPLACE TRIGGER "MYSOA_TRI_RY_GB_JBXX" BEFORE
INSERT
OR UPDATE OF "YWGL" ON "RY_GB_JBXX" FOR EACH ROW
DECLARE
C_YWGL CHAR(128);
N_PLACE NUMBER;
C_TAG CHAR(1);
C_YWGLZW CHAR(2) :='11';
BEGIN
IF INSERTING THEN
C_YWGL := '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
N_PLACE := TO_NUMBER(SUBSTR(:NEW.YWGL,1,LENGTH(:NEW.YWGL)-1));
C_TAG := SUBSTR(:NEW.YWGL,LENGTH(:NEW.YWGL),1);
C_YWGL := SUBSTR(C_YWGL,1,N_PLACE-1) || C_TAG || SUBSTR(C_YWGL,N_PLACE+1);
:NEW.YWGL := C_YWGL;
ELSIF UPDATING THEN
IF :NEW.YWGL = C_YWGLZW THEN
C_YWGL := :OLD.YWGL;
IF LENGTH(C_YWGL) < 128 THEN
C_YWGL := RPAD(C_YWGL,128,'0');
END IF;
N_PLACE := TO_NUMBER(SUBSTR(:NEW.YWGL,1,LENGTH(:NEW.YWGL)-1));
C_TAG := SUBSTR(:NEW.YWGL,LENGTH(:NEW.YWGL),1);
C_YWGL := SUBSTR(C_YWGL,1,N_PLACE-1) || C_TAG || SUBSTR(C_YWGL,N_PLACE+1);
:NEW.YWGL := C_YWGL;
ELSE
C_YWGL := :OLD.YWGL;
IF LENGTH(C_YWGL) < 128 THEN
C_YWGL := RPAD(C_YWGL,128,'0');
END IF;
N_PLACE := TO_NUMBER(SUBSTR(:NEW.YWGL,1,LENGTH(:NEW.YWGL)-1));
C_TAG := SUBSTR(:NEW.YWGL,LENGTH(:NEW.YWGL),1);
C_YWGL := SUBSTR(C_YWGL,1,N_PLACE-1) || C_TAG || SUBSTR(C_YWGL,N_PLACE+1);
:NEW.YWGL := C_YWGL;
:NEW.RYID :=:OLD.RYID;
:NEW.SFZMHM := :OLD.SFZMHM;
:NEW.XM := :OLD.XM;
:NEW.XB :=:OLD.XB;
:NEW.MZ :=:OLD.MZ;
:NEW.CSRQ := :OLD.CSRQ;
:NEW.SFZMMC :=:OLD.SFZMMC;
:NEW.JG := :OLD.JG;
:NEW.XMQP :=:OLD.XMQP;
:NEW.XMJP:=:OLD.XMJP;
:NEW.ZHSJC:= :OLD.ZHSJC;
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
:NEW.YWGL := :OLD.YWGL;
END;