繁体   English   中英

oracle,sql,触发器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM