我创建了一个只允许用户有10个当前下订单的触发器。所以现在当客户试图放置第11号订单时,oracle数据库会抛出一个错误。那么3错误。PL/SQL Oracle错误处理
ORA-20000:您目前有10个或更多的订单处理。
ORA-06512:在 “C3283535.TRG_ORDER_LIMIT”,第12行
ORA-04088:触发的执行期间错误 'C3283535.TRG_ORDER_LIMIT'
顶端错误是一个我已经创建使用:
raise_application_error(-20000,'您目前有10个或更多订单 处理'。
我只是想知道搜索后,并尝试了很多方法如何更改其他两个错误的错误信息,甚至不显示它们都一起给用户?
这里是我使用的代码
create or replace trigger trg_order_limit
before insert on placed_order for each row
declare
v_count number;
begin
-- Get current order count
select count(order_id)
into v_count
from placed_order
where fk1_customer_id = :new.fk1_customer_id;
-- Raise exception if there are too many
if v_count >= 10 then
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20000, 'You currently have 10 or more orders processing.');
end if;
end;
非常感谢 理查德
不喜欢触发器的另一个原因。你可以用你的insert语句包装一个程序包/程序调用,将其捕获并返回一个错误信息给领子?您不会说明该语句执行的编程环境。你可以过滤调用应用程序中的错误吗? – OldProgrammer 2013-03-21 13:05:15
我确信这个问题在其他地方得到了解答...我找不到它:-(。 – Ben 2013-03-21 13:07:12
[叹气...](http://stackoverflow.com/a/15546744/876937):As我说过,异常需要被你的应用程序所捕获,例如,如果你使用OCI编写PHP,你可以使用'oci_error'函数,看看'ORA-20000'错误[I]是否指定 – Xophmeister 2013-03-21 13:07:19