我有两个表FORM_A, FORM_B
FORM_A(ID,ID_OTHER,NAME,......)
FORM_B(ID,NAME,.....)
现在的要求是这样的,当我在FORM_A中插入一条记录记录时,
(1)如果ID_OTHER为空,则
在FORM_B中建一条记录,FORM_B中的ID可递增取得,NAME为FORM_A中新插入记录的NAME,然后将FORM_A中新插入记录的ID_OTHER设为FORM_B中新建记录的ID
(2)如果ID_OTHER不为空,则
在FORM_B中建一条记录,ID为FORM_A中的ID_OTHER,NAME为FORM_A中的NAME求满足上述要求的触发器的正确写法。
我自己写的,当FORM_A中原有记录大于1条时就出错,请高手指教!
CREATE OR REPLACE TRIGGER FORM_A_INSERT BEFORE INSERT
ON FORM_A
REFERENCING NEW AS new
FOR EACH ROW
DECLARE
n NUMBER;
BEGIN
SELECT :new.OTHER_ID INTO n FROM FORM_A;
IF n IS NULL THEN
SELECT MAX(ID) INTO n FROM FORM_B;
IF n IS NULL THEN
n:=1;
ELSE
n:=n+1;
END IF;
:new.OTHER_ID:=n;
END IF;
INSERT INTO FORM_B(ID, NAME) VALUES(n, :new.NAME);
END;
FORM_A(ID,ID_OTHER,NAME,......)
FORM_B(ID,NAME,.....)
现在的要求是这样的,当我在FORM_A中插入一条记录记录时,
(1)如果ID_OTHER为空,则
在FORM_B中建一条记录,FORM_B中的ID可递增取得,NAME为FORM_A中新插入记录的NAME,然后将FORM_A中新插入记录的ID_OTHER设为FORM_B中新建记录的ID
(2)如果ID_OTHER不为空,则
在FORM_B中建一条记录,ID为FORM_A中的ID_OTHER,NAME为FORM_A中的NAME求满足上述要求的触发器的正确写法。
我自己写的,当FORM_A中原有记录大于1条时就出错,请高手指教!
CREATE OR REPLACE TRIGGER FORM_A_INSERT BEFORE INSERT
ON FORM_A
REFERENCING NEW AS new
FOR EACH ROW
DECLARE
n NUMBER;
BEGIN
SELECT :new.OTHER_ID INTO n FROM FORM_A;
IF n IS NULL THEN
SELECT MAX(ID) INTO n FROM FORM_B;
IF n IS NULL THEN
n:=1;
ELSE
n:=n+1;
END IF;
:new.OTHER_ID:=n;
END IF;
INSERT INTO FORM_B(ID, NAME) VALUES(n, :new.NAME);
END;
ON FORM_A
FOR EACH ROW
BEGIN
IF :new.OTHER_ID IS NULL THEN
SELECT DECODE(MAX(ID),NULL,1,MAX(ID)+1) INTO :new.OTHER_ID FROM FORM_B;
END IF;
INSERT INTO FORM_B(ID, NAME) VALUES(:new.OTHER_ID, :new.NAME);
END;
这句有点多余,而且取不到数据,以为此时new.other_id还没有插入到form_a表中