[英]oracle , sql , trigger
CREATE TRIGGER "CPI"."TRGPRODOFFRPRICE"
AFTER UPDATE or INSERT ON CPI_LOADER_EXEMPTIONS
FOR EACH ROW
DECLARE
table_name varchar(32);
BEGIN
if substr(:new.SID_ID,1,3) = 'POP' then
table_name := 'PROD_OFFR_PRICE_CHARGE';
else
table_name := 'PROD_OFFR_PRICE_ALTERATION';
end if;
execute immediate 'UPDATE :1 set CPI_EXEMPTION=:2 WHERE SID_ID=:3' using table_name, :new.FLAG, :new.SID_ID;
END;
Based on comments i edited into this form, which looks better, but when trying to insert value into table which launches trigger i am getting error 'invalid table name', any idea what is causing this ? 基于我将其编辑为这种形式的注释,它看起来更好,但是当尝试在启动触发器的表中插入值时,出现错误“无效的表名”,是什么原因引起的? wrong tab var declaration possibly?
错误的tab var声明可能吗?
Try this (real PL/SQL): 试试这个(真正的PL / SQL):
CREATE TRIGGER trgSample
AFTER UPDATE or INSERT ON EXEMPTIONS
FOR EACH ROW
DECLARE
sid varchar(10);
sidVal varchar(100);
table_name varchar(32);
flag int;
BEGIN
sid := substr(:new.SID_ID,1,3);
flag := :new.FLAG;
sidVal := :new.SID_ID;
if sid = 'POP' then
table_name := 'PROD_VAL';
else
table_name := 'PROD_VAL2';
end if;
execute immediate 'UPDATE ' || table_name
|| ' set EXEMPTION=sidVal WHERE SID_ID=:x' using sidVal;
END;
AFter all only these changes were neccessary: 'change var to varchar2 for table_name:' only slight update on execute statement: 'execute immediate 'UPDATE :1 set CPI_EXEMPTION=:2 WHERE SID_ID=:3' using table_name, :new.FLAG, :new.SID_ID;' 只有所有这些更改都是必要的:'将var更改为varchar2 for table_name:'仅对执行语句进行轻微更新:'execute immediate'更新:1设置CPI_EXEMPTION =:2 WHERE SID_ID =:3'使用table_name,:new.FLAG, :new.SID_ID;”
thanks for all comments, they ´ve helped me a lot. 感谢您的所有评论,他们对我有很大帮助。 And need to say ai learn a lot.
并且需要说ai学到很多东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.