插入后在插入触发器oracle中选择



我有三个表CUSTOMERPARAM_MASTERCUSTOMER_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;

最新更新