第04章过程函数和程序包

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创建子程序
创建过程(语法如下)
CREATE [OR REPLACE] PROCEDURE procedure_name [(argument[{IN|OUT|IN OUT}]type, ... argument[{ IN| OUT| IN OUT}] type)]{ IS| AS} procedure_body
2019/9/19
举例
错误声明: CREATE OR REPLACE PROCEDURE ParameterLength( p_Parameter1 IN OUT VARCHAR2(10), p_Parameter2 IN OUT NUMBER(3,1)) AS BEGIN
p_Parameter1:='abcdefghijklm'; p_Parameter2:=12.3; END ParameterLength;
PL/SQL 程序块、过程、函数和数据包中 声明
2019/9/19
子程序的优点
具有可扩展性
可以自定义 PL/SQL 语言以满足应用程序的需要
提高可复用性和可维护性
子程序只要有效,就完全可以用于任何数目的应 用程序中
简化了维护/优化过程,因为如果定义更改只有子 程序受到影响
2019/9/19
例:过程的形式参数的用法 create or replace procedure modetest(
p_inparameter in number, p_outparmeter out number, p_inoutparameter in out number) is v_localvariable number; begin v_localvariable:=p_inparameter; (p_inparameter:=7; 错误) p_outparameter:=7; (v_localvariable:=p_outparameter; 错误) v_localvariable:=p_inoutparameter; p_inoutparameter:=7; end; 2019/9/19
调用过程时,实参的值将被传入该过程,这些 实参在该过程内部以引用的方式使用形参。
同时,作为参数传递机制一部分,对变量的约 束也传递给该过程。
在过程的声明中,强制指定参数CHAR和 VARCHAR2的长度,以及指定NUMBER参数 的精度或小数点后位数都是非法的,这是因为 这些约束可以从实参中获得。
END;
2019/9/19
过程的例子-带参数的过程
例题2: 利用过程进行查询处理,获取一个雇员的姓名、 工资、奖金信息。
create or replace procedure query_emp (v_emp_no in emp.empno%type, v_emp_name out emp.ename%type, v_emp_sal out emp.sal%type, v_emp_comm out emp.comm%type)
第四章过程、函数和程序包
(教材第8章)
4.1 存储过程 4.2 函数 4.3 程序包 4.4 依赖性
子程序
子程序: PL/SQL的过程和函数统称为子 程序
匿名块: 以DECLARE或BEGIN开始,每 次提交都被编译。匿名块不在数据库中存 储并且不能直接从其他PL/SQL块中调用。
命名块:除匿名块之外的其他块。包括过 程,函数,包和触发器。可以在数据库中 存储并在适当的时候运行。
2019/9/19
创建过程的注意事项
当创建一个已存在的过程时,指明 REPLACE选项。
关键字AS和IS均可,它们本身没有差别。 PL/SQL块可以从BEGIN开始,也可以从局
部变量说明开始。 PL/SQL块不能以DECLARE开始。 用END或END 加上过程名作为PL/SQL块的
正确声明: CREATE OR REPLACE PROCEDURE ParameterLength( p_Parameter1 IN OUT VARCHAR2, p_Parameter2 IN OUT NUMBER) AS BEGIN
p_Parameter1:='abcdefghijklmno'; p_Parameter2:=12.3; END Pa2r0a19m/9e/1t9erLength;
结束标志。
2019/9/19
过程的形式参数的三种模式
类型
描述
IN 参 数 ( 缺 省 类 型 )从 调 用 环 境 中 向 过 程 传 值
OUT 参数
从过程中返回值给调用者
IN OUT 参数 局部变量
既可从调用者向过程传值, 也可从过程中返值给调用者 在过程内部存放值
2019/9/19
过程的形式参数的三种模式
在形参和实参之间传递数值
文字或常数作为实参
因为复制功能的使用,对应于参数IN OUT或OUT的 实参必须是变量,而不能是常数或表达式。也就是 说,程序必须提供返回的变量的存储位置。
编译检查
PL/SQL编译器在创建过程时将对合法的赋值进行检
查。
从OUT参数读取数据
2019/9/19
对形参的约束
is begin
select ename,sal,comm into v_emp_name,v_emp_sal,v_emp_comm from emp where empno=v_emp_no; end query_emp;
创建过程
过程的结构应具有下面所示的特征:
CREATE OR REPLACE PROCEDURE procedure_name[ parameter_list] AS
/*Declarative se来自百度文库tion is here*/ BEGIN
/*Executable section is here*/ EXCEPTION
/*Exception section is here*/ END[ procedure_name];
2019/9/19
过程的例子-无参数的过程
例题1: 创建一个无参数过程,记录用户名和当前日期
CREATE OR REPLACE PROCEDURE log_execution IS
BEGIN INSERT INTO log_table(user_id,log_date) VALUES(user,sysdate);
相关文档
最新文档