oracle过程参数默认值,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语句被撤销了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值