插入后选择插入触发器oracle

时间:2015-11-25 09:12:13

标签: sql oracle

我有三个表CUSTOMERPARAM_MASTERCUSTOMER_PARAM。我在插入表CUSTOMER时编写了一个触发器来从表PARAMS_MASTER获取数据并获取新的CUSTOMER_ID,我想将其插入到表CUSTOMER_PARAM中。

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;

1 个答案:

答案 0 :(得分:2)

您的触发器看起来会抛出变异表错误。这是因为您的触发器代码包括CUSTOMER上的选择,即您要插入的表。

碰巧这种选择是不必要的,因为你只需要新的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;