如何在Oracle中执行DELETE查询时重现异常

时间:2015-08-26 09:16:27

标签: oracle plsql exception-handling sql-delete

我希望在Oracle数据库中的表中执行DELETE查询时重现异常,以进行某些测试。

但删除时如何发生异常?

3 个答案:

答案 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