Oracle 存储过程的默认值参数和过程中的事务处理
发布时间:2020-12-12 14:58:56 所属栏目:百科 来源:网络整理
导读:1.存储过程的参数也可以是默认值,这样当调用该过程时,如果未向参数传入值,则该参数将使用定义的默认值 #为JOB_PARAM,HIRE_PARAM和SALARY_PARAM参数设置了默认值,在调用该存储过程时,用户就不必再为这些参数提供值 SQL create or replace procedure add_
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,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语句被撤销了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |