[英]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;
基于我将其编辑为这种形式的注释,它看起来更好,但是当尝试在启动触发器的表中插入值时,出现错误“无效的表名”,是什么原因引起的? 错误的tab var声明可能吗?
试试这个(真正的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;
只有所有这些更改都是必要的:'将var更改为varchar2 for table_name:'仅对执行语句进行轻微更新:'execute immediate'更新:1设置CPI_EXEMPTION =:2 WHERE SID_ID =:3'使用table_name,:new.FLAG, :new.SID_ID;”
感谢您的所有评论,他们对我有很大帮助。 并且需要说ai学到很多东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.