Oracle触发器调用存储过程资料收集整理
触发器:Trigger
存储过程:Stored Procedure
// ******************** 收集1 ********************
1.触发器写法
create or replace trigger HVM_ZTPJ_BYQ
  after insert or update or delete on Xftpj_Pjjl_Byq
declare

begin

--直接写存储过程名称+;

hvm_byq_tj(1);  

end HVM_ZTPJ_BYQ;

2.触发器的控制

alter table xftpj_pjjl_byq disable all triggers; --禁用触发器
alter table xftpj_pjjl_byq enable all triggers; --启用触发器

// ***************************************************

// ********************* 收集2 *********************

触发器传参数给存储过程,存储过程中有 insert tableA where id=1....
接着 update tableA where id=1.

由于insert语句不是自动提交,所以当insert语句没有 commit 的时候,update 会报“表/视图发生了变化,程序不能读它”的错误,也就是id=1这一行被insert锁住了。此时,在触发器中调用自治事务,问题得以解决。

Oracle自治事务(Autonomous Transaction)将一个主事务分割成几个子事务,在执行完子事务以后再继续主事务。这里的关键是,子事务是独立于主事务的,子事务中的Rollback 和 Commit 操作只会影响子事务中的DML操作;同样,主事务中的 Rollback 和 Commit 操作只会影响事务中的DML操作,而不会影响子事务中的操作。在子事务中已经commit的操作,不会被主事务中的rollback撤销。

制定PL/SQL程序块为自治事务可以通过在程序开头使用如下命令实现
          PRAGMA AUTONOMOUS_TRANSACTION
定义自治事务必须遵循以下规则:
1.如果要被定义为自治事务的程序是匿名的,则它必须是一个最外层的程序块。
2.如果不是匿名的,则它必须是函数或者过程,或者是包含在一个中。在一个包中,只有其中的函数或过程能够定义成自治事务。整个包不能申明为自治事务。
3.一个对象的方法可以申明为自治事务
4.触发器可以申明为自治事务
5.内嵌程序块不能申明为自治事务

注意:对于一个匿名的自治事务程序块来说,只有这个块的begin和end之间的代码被看作是自治事务。

触发器代码如下:

 1 create or replace trigger trigger_main2_update
 2        before update on t_busi_main_presend2  for each row
 3          declare
 4 pragma autonomous_transaction; --声明该触发器的事务为自治事务
 5 begin
 6           DBMS_OUTPUT.PUT_LINE(:new.SHSTATUS);
 7            if  :new.SHSTATUS='1' and :old.SHSTATUS='0'    then
 8            p_main2_mx(:new.id,:new.smscontent,:new.allcode,:new.phonetype,:new.sjtongdaoid,:new.cjr,:new.pretongdaoid,:new.clientid,:new.shr,:new.pretime,:new.cjsj,:new.shstatus,:new.kouchucnt,:new.dxlx,:new.allcount); --调用存储过程,并给存储过程传参数
 9             :new.SENDSTATUS:='1' ;
10            end if;
11       commit;
12 end;
13
14  

运用AT(autonomous_transaction)时,有一些注意事项,简单列举如下:
1.     在匿名PL/SQL块中,只有顶级的匿名PL/SQL块可以被设为AT
2.     如果AT试图访问被MT控制的资源,可能有deadlock 发生.
3.     Package 不能被声明为AT,只有 package 所拥有的 function 和 procedure 才能声明为AT
4.     AT程序必须以commit 或 rollback 结尾,否则会产生Oracle错误ORA-06519: active autonomous transaction detected and rolled back

Oracle 触发器调用存储过程|转||待研究|相关推荐

  1. Oracle 存储过程的创建,及触发器调用存储过程

    一.创建存储过程 1.存储过程写法 create or replace procedure HVM_BYQ_TJ--变压器统计信息--->入库 (id in number) as beginfo ...

  2. mysql触发器调用存储过程出错_mysql 触发器中调用存储过程

    想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...

  3. oracle java调用存储过程_Java调用Oracle存储过程

    一:无返回值的存储过程 存储过程为: CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN I ...

  4. mysql 1422_mysql触发器调用存储过程,报1422错

    --------------------------------触发器创建新分类触发存储过程-----------------------------DROPTRIGGERIFEXISTScatego ...

  5. Oracle定时器调用存储过程

    1. 创建表 create table job_table(run_time date); 2. 创建存储过程 create or replace procedure job_proc is begi ...

  6. Oracle定时调用存储过程

    #1Demo: 1.创建表 create table job_table(run_time date); 2.创建存储过程 create or replace procedure job_proc i ...

  7. oracle 查询调用某一存储过程的job,oracle job 调用存储过程的使用

    -- job begin sys.dbms_scheduler.create_job(job_name => 'SSS.P_TRMS_CAR_TASK_JOB', job_type => ...

  8. Oracle Study之--Oracle触发器(Trigger)

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  9. ORACLE触发器具体解释

    ORACLE PL/SQL编程之八: 把触发器说透 本篇主要内容例如以下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 ...

最新文章

  1. 统计每天某一时间段的SQL语句
  2. 安装NUC972的BSP
  3. Codeforces Round #361 (Div. 2) B. Mike and Shortcuts bfs
  4. #论文 《ImageNet Classification with Deep Convolutional Neural Networks》
  5. sharepoint列表EventHandle的开发 -转
  6. 打破信息孤岛完成EAI
  7. 微服务框架下的思维变化-OSS.Core基础思路
  8. YbtOJ#20060-[NOIP2020模拟赛B组Day3]字串修改【模拟】
  9. 最新京东炸年兽活动一键做任务工具v1.4
  10. NUC1019 数素数【素数筛选法】
  11. Linux 怎么重启 mysql
  12. 阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
  13. Nvelocity 第二章 注释语法
  14. 常见驱动程序相关知识
  15. python科学计算基础教程pdf下载-python科学计算 第二版
  16. 决策支持系统 (Decision-making Support System, DSS) (人机智能系统)
  17. 使用WEPE一键安装系统
  18. asp.net页面中的Console.WriteLine结果如何查看
  19. 携程网络防火墙自动化运维之道
  20. GitHub注册过程(图文详细讲解)

热门文章

  1. redis学习之常用数据类型
  2. python之dict基础类型
  3. (十)MySQL日志
  4. asp.net mvc下的多语言方案 包含Html,Javascript和图片
  5. 手機電視挑戰傳統視聽習慣
  6. 《LeetCode力扣练习》第9题 C语言版 (做出来就行,别问我效率。。。。)
  7. 【LeetCode】121.买卖股票的最佳时机
  8. Java数据结构2:堆排序思考
  9. python处理teradata数据库_Teradata数据库——你需要了解的基础知识
  10. 电脑介绍,最好手提电脑介绍