【问题标题】:Update query in after insert trigger插入触发器后更新查询
【发布时间】:2018-05-08 17:02:31
【问题描述】:

我想根据表“A”上的插入来更新名为“B”的表,两个表之间的匹配是名为“IDENT”的“A”表列和 B 表 REGION_CODE_MW||MW_ID(组合)。我使用了以下触发器,但它抛出了类似(popup)'Enter Binds for New'之类的错误。触发器有什么问题

   create or replace 
trigger testrigger
after insert 
on A
for each row 
declare 
link_id varchar2(200);
BEGIN
  IF(:NEW.IDENT != '') THEN
    link_id := :NEW.IDENT;
  end if; 
  UPDATE B
  SET IMPL_DSGN    ='Yes',
    EQUIP_AVAILABLE='Yes'
  where REGION_CODE_MW
    ||MW_ID=link_id;
    END;

【问题讨论】:

  • 至少部分问题是变量COUNTERMW_ID_LINK 从未被声明。
  • 我更新了我的问题,现在没有错误,但现在的问题是每当在 A 上插入时,表 B 上没有更新,有什么问题吗??
  • 表 A 中是否有名为 link_id 或类似名称的列?
  • 在 A 中我有列 'IDENT' 并​​且在 B 中我与 REGION_CODE_MW ||MW_ID 的组合匹配

标签: sql .net oracle triggers database-trigger


【解决方案1】:

可以使用IF(:NEW.IDENT is not null ) THEN 代替IF(:NEW.IDENT != '') THEN

(比较是错误的)。

此外,update statement 应该在那个if statement 中:

 IF( :NEW.IDENT is not null ) THEN
    link_id := :NEW.IDENT;

  UPDATE B
     SET IMPL_DSGN    ='Yes',
         EQUIP_AVAILABLE='Yes'
   WHERE REGION_CODE_MW||MW_ID=link_id;
 END IF;

【讨论】:

  • 非常感谢,strange is not null 正在工作,而不是 != ''
  • @peter,这并不奇怪,因为 '' 在 Oracle 中是 NULL=!= 比较总是返回 false。也就是说,NULL = NULLNULL != NULL 都将始终为 false。例如,尝试SELECT * FROM dual WHERE '' != NULL - 不会返回任何内容。将 != 替换为 = 并且 still 不会返回任何内容。希望这会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 2016-10-13
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多