使用 raise_application_error 的 PL SQL 触发器会引发错误。

Posted

技术标签:

【中文标题】使用 raise_application_error 的 PL SQL 触发器会引发错误。【英文标题】:PL SQL trigger using raise_application_error thows error. 【发布时间】:2013-05-08 20:02:44 【问题描述】:

我有一些代码需要帮助调试,但我觉得如果我能让其中一个运行,我就能得到其余的(哦,我多么希望)。

create or replace 
trigger minimumwage
before insert or update on Employee
for each row
begin
if :new.Wage < 7.25 
then raise_application_error('-20000,Pay is below Texas minimum wage!');
end if;
end;
/

如果有帮助,我正在尝试在通过 sqlplus 在我学校服务器上运行的表上执行此操作。

【问题讨论】:

你有什么问题? 警告:触发器创建时出现编译错误。是问题 我修复了我在其他触发器上的所有错误,除了一个涉及总体计数的错误我真的很高兴我发布了这个问题 运行 show errors 并向我们展示真正的错误消息。 【参考方案1】:

当您遇到错误时,指定什么错误总是有帮助的。触发器中的 raise_application_error 调用存在语法错误。该过程有两个参数,一个数字和一个字符串。您传入的是一个长字符串的单个参数。

create or replace trigger minimumwage
  before insert or update on Employee
  for each row
begin
  if :new.Wage < 7.25 
  then 
    raise_application_error(-20000,'Pay is below Texas minimum wage!');
  end if;
end;

假设您的EMPLOYEE 表中有WAGE 列,则应该是有效的。

【讨论】:

哇!哦,我的上帝 D:非常感谢你,我一直为它吓坏了【参考方案2】:
create or replace trigger deny_dec_pu before update of PU on ARTICLE
 for each row
 declare     
 erreur_pu exception;
  begin

     *insert into erreur values ('Operation de MAJ',sysdate);*

      -- this intruction is never executec why ?          

  if (:new.pu < :old.pu) then
  raise erreur_pu ; 
 end if;
 exception 
 when erreur_pu then 
  Raise_application_error(-20100, 'rrrrrrrr', FALSE); 

 end;

/

【讨论】:

以上是关于使用 raise_application_error 的 PL SQL 触发器会引发错误。的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份