我希望在Oracle数据库中的表中执行DELETE查询时重现异常,以进行某些测试。
但删除时如何发生异常?
答案 0 :(得分:0)
您必须拥有一个条件,您希望根据该条件引发与业务逻辑相关的异常。但是,如果您想强制引发异常,则可以定义例外并将其提升为“提升您的异常”#;;
答案 1 :(得分:0)
create table test_delete(a varchar2(10));
insert into test_delete values('abc');
insert into test_delete values('abc');
insert into test_delete values('err123');
insert into test_delete values('err3');
CREATE OR REPLACE TRIGGER delete_exeption
BEFORE
DELETE
ON test_delete
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
if( INSTR( :old.a, 'err') > 0 ) then
raise_application_error(-20000,'Error');
end if;
end;
/
delete from test_delete where a = 'abc'; -- no error
delete from test_delete where a = 'err123'; -- error
仅在删除行中包含“err”的列a
期间才会出现错误答案 2 :(得分:0)
如果我理解正确,你就会寻找异常的语义。 这是一个例子:
DECLARE
pe_ratio NUMBER(3,1);
BEGIN
SELECT price / earnings INTO pe_ratio FROM stocks
WHERE symbol = 'XYZ'; -- might cause division-by-zero error
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio);
COMMIT;
EXCEPTION -- exception handlers begin
WHEN ZERO_DIVIDE THEN -- handles 'division by zero' error
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL);
COMMIT;
...
WHEN OTHERS THEN -- handles all other errors
ROLLBACK;
END; -- exception handlers and block end here
正如您所看到的,您可以使用预定义的异常或对其他人使用“WHEN OTHER THEN”子句,实际上您可以将它用于所有异常。 实际上我从下面的链接中复制了来自Oracle文档的这个例子,在这里你也可以找到预定义的例外列表: https://docs.oracle.com/cd/B10500_01/appdev.920/a96624/07_errs.htm