「已注销」 2017-05-21 02:27 采纳率: 0%
浏览 3144

在oracle数据库中的触发器怎么可以回滚主事务的操作

我执行下面这段代码之后没有出错,然后更新cusinfo表,想要回滚主事务的操作,但是这里提示说不能再触发器使用rollback(使用子事务也没什么用)
create or replace trigger forbid_insert_update_cusinfo --触发器,通过cusinfo表的FILINGMAN或CHARGEMAN列值是否存在于userinfo表中,若存在插入,若不存在就rollback
before update or insert of filingman,chargeman on cusinfo
for each row
declare
v_countf number;
v_countc number;
begin
select count(*) into v_countf from userinfo where username=:new.filingman;
select count(*) into v_countc from userinfo where username=:new.chargeman;
if v_countf=0 then--要注意,这里的判断不能写==
rollback;
elsif v_countc=0 then
rollback;
end if;
end;

  • 写回答

1条回答 默认 最新

  • ojbk_ 2017-05-25 02:18
    关注

    这样的需求我还是推荐你用存储过程吧:
    CREATE OR REPLACE PROCEDURE forbid_insert_update_cusinfo
    IS
    CHARS INT:=0;
    BEGIN
    SELECT COUNT(*) INTO CHARS FROM cusinfo c WHERE c.FILINGMAN is not nul and c.CHARGEMAN is not null;
    IF CHARS > 0 THEN
    insert into .......;
    COMMIT;
    END IF;
    COMMIT;
    END forbid_insert_update_cusinfo

    评论

报告相同问题?

悬赏问题

  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决