Oracle 存储过程的默认值参数和过程中的事务处理

 1.存储过程的参数也可以是默认值,这样当调用该过程时,如果未向参数传入值,则该参数将使用定义的默认值

    #  为JOB_PARAM,HIRE_PARAM和SALARY_PARAM参数设置了默认值,在调用该存储过程时,用户就不必再为这些参数提供值

SQL> create or replace procedure add_employee(
  2    id_param in number,
  3    name_param in varchar2,
  4    job_param in varchar2 default 'SALESMAN',
  5    hire_param in date default sysdate,
  6    salary_param in number default 1000) is
  7  begin
  8    insert into scott.emp(empno,ename,job,hiredate,sal)
  9    values(id_param,name_param,job_param,hire_param,salary_param);
 10  end add_employee;
 11  /

过程已创建。

    # 调用过程测试

SQL> begin
  2    add_employee(8124,'海哥');
  3  end;
  4  /

PL/SQL 过程已成功完成。

SQL> select empno,ename,job,hiredate,sal
  2  from scott.emp
  3  where empno=8124;

     EMPNO ENAME      JOB       HIREDATE              SAL
---------- ---------- --------- -------------- ----------
      8124 海哥       SALESMAN  27-4月 -17           1000

 2.在PL/SQL过程中,不仅可以包括插入和更新这类DML操作,还可以包括事务处理语句COMMIT和ROLLBACK。对于过程而言,每个过程就相当于一个子事务,用户可以在自己事务处理的任何地方调用该过程,并且无论父事务是提交还是回滚,用户都可以确保过程中的子事务被执行。

  #创建两个表TEMP和LOG_TABLE

SQL> create table temp(n number);

表已创建。

SQL> create table log_table(
  2    username varchar2(20),
  3    message varchar2(4000));

表已创建。

 #建立一个存储过程INSERT_INTO_LOG,用于向表LOG_TABLE添加记录

SQL> create or replace procedure insert_into_log(msg_param varchar2) is
  2     pragma autonomous_transaction;
  3  begin
  4   insert into log_table(username,message)
  5   values(user,msg_param);
  6   commit;
  7   end insert_into_log;
  8   /

  #在匿名程序块中调用INSERT_INTO_LOG过程向LOG_TABLE表中添加数据,并使用INSERT语句向表TEMP添加数据

SQL>  begin
  2     insert_into_log('添加数据到TEMP表之前调用');
  3     insert into temp
  4     values(1);
  5     insert_into_log('添加数据到TEMP表之后调用');
  6     rollback;
  7   end;
  8   /

PL/SQL 过程已成功完成。

 #对表中数据进行分析

SQL> select * from temp;

未选定行

SQL> select * from log_table;

USERNAME
--------------------
MESSAGE
--------------------------------------------------------------------------------

SCOTT
添加数据到TEMP表之前调用

SCOTT
添加数据到TEMP表之后调用

 #总结:从结果可以看出,在TEMP表中并没有记录,说明INSERT语句被撤销了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇潇雨歇_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值