trigger的使用说明有提到可以替代foriegn key的功能. 比如分布式数据库里两张表不在一个库又存在相互的依赖关系,可以用trigger来检查外健. 不过我比较迷惑这个功能具体是怎么实现的. 我理解是操作的本体(增删改)是写在存储过程/函数里. trigger作为额外的部分,会在函数触发(增删改)之前执行自己的代码做检查.可是问题是,如果检查到不合法的操作,trigger如何来中断函数的运行呢?

解决方案 »

  1.   

    中断函数操作?
    那就抛出异常raise_application_error()来中断。
    同时回滚。
      

  2.   

    如果检查到不合法的操作,trigger如何来中断函数的运行呢?
    if 不合法 then
      rollback;
      raise_application_error();
    end if;
      

  3.   

    如果要用trigger来实现外键约束,那么对于不在同一个数据库,一般创建dblink来查核约束,检查到不合法的操作,在trigger中采用捕获异常exception的形式,若要将异常信息抛出,则用raise_application_error自定义异常来实现等。