我有三个表CUSTOMER
、PARAM_MASTER
和CUSTOMER_PARAM
。我在插入表CUSTOMER
时编写了一个触发器,以从表PARAMS_MASTER
中获取数据,并获得我想插入到表CUSTOMER_PARAM
中的新CUSTOMER_ID
。
create or replace TRIGGER "CUSTOMER_PARAM_INS_TRIG"
BEFORE INSERT ON CUSTOMER
for each row
BEGIN
INSERT INTO CUSTOMER_PARAMS (PARAM_ID,PARAM_VALUE_EN,PARAM_VALUE_VI,CUSTOMER_ID)
SELECT PARAM_ID,DEFAULT_VALUE_EN,DEFAULT_VALUE_VI,NEW:CUSTOMER_ID
FROM PARAMS_MASTER,CUSTOMER
WHERE PARAM_GROUP='CUS';
END;
您的触发器看起来会抛出一个变化表错误。这是因为您的触发器代码包括CUSTOMER上的select,即您要插入的表。
碰巧这种选择是不必要的,因为您只需要新的CUSTOMER_id。所以这应该有效:
create or replace TRIGGER "CUSTOMER_PARAM_INS_TRIG"
BEFORE INSERT ON CUSTOMER
for each row
BEGIN
INSERT INTO CUSTOMER_PARAMS
(PARAM_ID,PARAM_VALUE_EN,PARAM_VALUE_VI,CUSTOMER_ID)
SELECT PARAM_ID,DEFAULT_VALUE_EN,DEFAULT_VALUE_VI, :NEW.CUSTOMER_ID
FROM PARAMS_MASTER
WHERE PARAM_GROUP='CUS';
END;