无法使用“WHEN”创建触发器

Posted

技术标签:

【中文标题】无法使用“WHEN”创建触发器【英文标题】:unable to create a trigger using ' WHEN ' 【发布时间】:2016-03-20 10:14:02 【问题描述】:
create trigger info22 after insert on table_info1 for each row 
when( :new.pid < 60 )
begin
  dbms_output.put_line(' thus the given id is less than 60');
  insert into table_info2 values(:new.pid, :new.pname, :new.ploc);
end;

当我输入上述查询时,我收到一个错误

ORA-25000: invalid use of bind variable in trigger WHEN clause

【问题讨论】:

【参考方案1】:

在引用新值时不需要使用分号,因为这样做,Oracle 认为您正在尝试使用绑定变量。 尝试输入 new. 而不是 :new. 看看是否有帮助。

【讨论】:

请详细说明'new'关键字的绑定和使用 当然,new 关键字用于引用输入到表中的新行。绑定变量是一个完全不同的主题,用于提高在变量中使用不同值但保持相同结构多次运行的查询的性能。欢迎您在此处阅读更多相关信息 - 例如,akadia.com/services/ora_bind_variables.html 如果您发现我的回答有帮助,请将其标记为正确答案。谢谢。【参考方案2】:

WHEN 子句中的new/old 引用不需要冒号

变化:

when( :new.pid < 60 )

收件人:

when( new.pid < 60 )

【讨论】:

谢谢你能详细说明什么是“绑定”

以上是关于无法使用“WHEN”创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

使用 when 语句创建更新触发器

无法使用 getContentResolver().query() 进行 CASE WHEN 查询

where 中使用 case when 无法使用索引

空字符串无法解释的MySQL错误#1064创建更新触发器后?

更新触发器后创建空字符串时出现无法解释的 MySQL 错误 #1064?

R dplyr mutate 条件 when_case 无法更新数据帧