一、目标
- 创建和使用oracle11g的过程
- 创建和使用oracle11g的函数
- 理解oracle11g中的过程、函数的区别
- 理解oracle11g的自主事务处理的含义
二、子程序
1、命名的 PL/SQL 块,编译并存储在数据库中。
2、子程序的各个部分:
(1)声明部分
(2)可执行部分
(3)异常处理部分(可选)
3、子程序的分类:
(1)过程 - 执行某些操作
(2)函数 - 执行操作并返回值
4、子程序的优点
(1)模块化
将程序分解为逻辑模块
(2)可重用性
可以被任意数目的程序调用
(3)可维护性
简化维护操作
(4)安全性
通过设置权限,使数据更安全
三、存储过程
1、创建过程的语法:
CREATE [OR REPLACE] PROCEDURE <procedure name> [(<parameter list>)] IS|AS <local variable declaration> BEGIN <executable statements> [EXCEPTION <exception handlers>] END;
2、创建存储过程【in类型】,通过sql语句执行
3、创建存储过程【out类型】,并在pl/sql段中执行存储过程
4、创建存储过程【in out类型】,只能在pl/sql块中进行调用
5、在sqlplus中执行存储过程,需要使用exec;在pl/sql段执行存储过程不需要使用exec
6、存储过程的调用
EXECUTE procedure_name(parameters_list);
7、将过程的执行权限授予其他用户:
SQL> GRANT EXECUTE ON find_emp TO MARTIN;
SQL> GRANT EXECUTE ON swap TO PUBLIC;
8、删除过程:
SQL> DROP PROCEDURE find_emp;
四、函数
1、函数是可以返回值的命名的 PL/SQL 子程序。
2、创建函数的语法:
CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations] BEGIN Executable Statements; RETURN result; EXCEPTION Exception handlers; END;
3、定义函数的限制:
(1)函数只能接受 IN 参数,而不能接受 IN OUT 或 OUT 参数
(2)形参不能是 PL/SQL 类型,只能是数据库类型
(3)函数的返回类型也必须是数据库类型
4、访问函数的两种方式:
(1)使用 PL/SQL 块
(2)使用 SQL 语句
5、创建函数:
CREATE OR REPLACE FUNCTION fun_hello RETURN VARCHAR2 IS BEGIN RETURN 'hello'; END; /
6、从SQL语句调用函数
SQL> SELECT fun_hello FROM DUAL;
7、从pl/sql块中调用
五、函数和过程的比较
六、自主事务处理
1、自主事务处理流程
(1)主事务处理启动独立事务处理
(2)然后主事务处理被暂停
(3)自主事务处理子程序内的 SQL 操作
(4)然后终止自主事务处理
(5)恢复主事务处理
2、PRAGMA AUTONOMOUS_TRANSACTION
用于标记子程序为自主事务处理
3、自主事务处理的特征:
(1)子程序与主事务处理的状态无关
(2)子程序提交或回滚操作不影响主事务处理
(3)自主事务处理(子程序)的结果对其他事务是可见的
(4)(子程序)能够启动其他自主事务处理
文章评论