当违反PL / SQL时显示自定义消息

时间:2014-08-23 01:30:01

标签: plsql constraints custom-exceptions

我正在写一个pl / sql程序。我对一个不允许低于0和高于500的值的列有一个约束。如果违反了这个约束,我需要显示自定义消息(例如“ID超出范围”)。目前这是例外,也是获取的输出。还有另一个输出错误的过程,因此使用raise_applcation_error。

异常

when VALUE_ERROR then
raise_application_error(-20002, 'Customer ID out of range');

错误消息

"ORA-20000: ORA-02290: check constraint (s5849497.CK_ID_RANGE) violated"

我想要什么

"ORA-20000: Customer ID out or range"

如果它有帮助,这是整个块

set serveroutput on;

---------------------------------------------------------------
alter table customer
add constraint ck_id_range
check (custid > 0 and custid < 500);
---------------------------------------------------------------

create or replace procedure ADD_CUSTOMER_TO_DB(pcustid number, pcustname varchar2) as

begin
    insert into customer
    values (pcustid,pcustname,0,'OK');
exception
when DUP_VAL_ON_INDEX then
  raise_application_error(-20001, 'Duplicate customer ID');
when VALUE_ERROR then
  raise_application_error(-20002, 'Customer ID out of range');
when others then
  raise_application_error(-20000, SQLERRM);
end;

谢谢

1 个答案:

答案 0 :(得分:2)

我猜你得到的是ORA-02290错误。在异常处理程序中捕获它的方法是声明并初始化特定错误代码的异常(在本例中为-2290),然后在处理程序中使用自定义异常:

create or replace procedure ADD_CUSTOMER_TO_DB(pcustid number,
                                               pcustname varchar2)
as
  eCheck_constraint_violated  EXCEPTION;
  PRAGMA EXCEPTION_INIT(eCheck_constraint_violated, -2290);
begin
    insert into customer
    values (pcustid,pcustname,0,'OK');
exception
when DUP_VAL_ON_INDEX then
  raise_application_error(-20001, 'Duplicate customer ID');
when eCheck_constraint_violated then
  raise_application_error(-20002, 'Customer ID out of range');
when others then
  raise_application_error(-20000, SQLERRM);
end;

正如您将在上面看到的那样,我刚刚将VALUE_ERROR替换为新定义的异常。

如果您获得的错误不是-2290,请将您在PRAGMA EXCEPTION_INIT调用中看到的错误放在上面而不是-2290。

分享并享受。