文档介绍:第七章:PL/SQL高级编程
第一节存储过程函数的概念
第二节包
第三节触发器
第一节存储过程函数的概念
开发一个存储过程或函数目的是把一个 PL/SQL块存进数据库中,并在以后重复使用。
例如:创建一个记录用户名和当前日期的
无参数过程
CREATE PROCEDURE log_execution IS
BEGIN
INSERT INTO log_table(user_id, log_date)
VALUES(user,sysdate);
END;
/
可以在不同的环境调用同一个存储过程。
注意:语法有区别
 ●在 SQL*Plus中记录用户名和当前日期
SQL> EXECUTE log_execution;
●从存储过程 FIRE_EMP中记录用户名和当前日期
CREATE PROCEDUER fire_emp
(v_emp_no IN %TYPE)
IS
BEGIN
log_execution;
DELETE FROM emp
WHERE empno=v_emp_no;
END;
/
一、存储过程与应用程序的区别
概念
存储过程
应用程序
存储位置
存储在数据库数据字典中
存储在应用程序中
调用地方
任何数据库工具或应用中都可以调用
只能在建立程序的应用中才能调用
相互调用
不可以调用应用程序
可以调用存储过程
建立程序的文档存储的位置
存储在数据库的数据字典中
存储在当前的应用中
安全性
由数据库提供安全保证,必须通过授权才能使用存储子程序
安全性靠应用程序保证,如果能执行应用程序,就能执行该程序。
二、开发存储过程和函数
1、开发一个存储过程和函数的步骤
(1)用文本编辑器编写一个含有Create Procedure或Create Function语句的PL/SQL脚本文件。(如:c:\)
(2)在 SQL*Plus中用命令(如:SQL>start c:\;)编译脚本文件,调试编译错误。系统就将创建过程或函数的源代码存入数据字典user_source中。
(3) 编译成功后将编译代码存入数据字典
(4) 调用存储过程和函数,在运行期间调试存储过程、函数的逻辑错误。
2、创建存储过程的语法
CREATE [OR REPLACE] PROCEDURE 过程名
[(参数名[IN | OUT | IN OUT] 数据类型, …)]
{IS | AS}
[说明部分]
BEGIN
语句序列
[EXCEPTION 出错处理]
END [过程名];
注意:IS 后面是一个完整的PL/SQL块的三部分(参见第六章),可以定义局部变量、游标等,但不能以 DECLARE开始。
★形式参数可以有三种模式----IN、OUT、IN OUT。如果没有为形式参数指定模式,那么缺省的模式是IN。
 
类型描述
--------------------------------------------------------------------
IN(缺省)参数用来从调用环境中向过程传递值
OUT参数用来从过程中返回值给调用者
IN OUT参数既可从调用者向过程中传递值,
也可以从过程中返回可能改变了
的值给调用者
局部变量在过程内部存放值
例:下面的过程说明了三种模式参数的区别
create or replace procedure modetest(
p_inparameter in number,
p_outparameter out number,
p_inoutparameter in out number)
is
v_localvariable number;
begin
v_localvariable:=p_inparameter; /*正确*/
(p_inparameter:=7; 错误)
v_outparameter:=7; /*正确*/
(v_localvariable:=p_outparameter; 错误)
v_localvariable:=p_inoutparameter; /*正确*/
v_inoutparameter:=7; /*正确*/
end;
/
例:下列存储过程给某一指定的员工涨指定数量的工资。
Create procedure raise_salary
(emp_id integer, v_increase real)
is
begin
update emp set sal= sal + v_increase
where empno=emp_id ;
commit;
end ;
/
例:下列