文档详情

第04章过程、函数和程序包.ppt

发布:2017-11-26约1.39万字共66页下载文档
文本预览下载声明
第四章过程、函数和程序包 (教材第8章) 子程序 子程序: PL/SQL的过程和函数统称为子程序 匿名块: 以DECLARE或BEGIN开始,每次提交都被编译。匿名块不在数据库中存储并且不能直接从其他PL/SQL块中调用。 命名块:除匿名块之外的其他块。包括过程,函数,包和触发器。可以在数据库中存储并在适当的时候运行。 PL/SQL 程序块、过程、函数和数据包中声明 子程序的优点 具有可扩展性 可以自定义 PL/SQL 语言以满足应用程序的需要 提高可复用性和可维护性 子程序只要有效,就完全可以用于任何数目的应用程序中 简化了维护/优化过程,因为如果定义更改只有子程序受到影响 创建子程序 创建过程(语法如下) 创建过程的注意事项 当创建一个已存在的过程时,指明REPLACE选项。 关键字AS和IS均可,它们本身没有差别。 PL/SQL块可以从BEGIN开始,也可以从局部变量说明开始。 PL/SQL块不能以DECLARE开始。 用END或END 加上过程名作为PL/SQL块的结束标志。 过程的形式参数的三种模式 过程的形式参数的三种模式 例:过程的形式参数的用法 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; 在形参和实参之间传递数值 文字或常数作为实参 因为复制功能的使用,对应于参数IN OUT或OUT的实参必须是变量,而不能是常数或表达式。也就是说,程序必须提供返回的变量的存储位置。 编译检查 PL/SQL编译器在创建过程时将对合法的赋值进行检查。 从OUT参数读取数据 对形参的约束 调用过程时,实参的值将被传入该过程,这些实参在该过程内部以引用的方式使用形参。 同时,作为参数传递机制一部分,对变量的约束也传递给该过程。 在过程的声明中,强制指定参数CHAR和VARCHAR2的长度,以及指定NUMBER参数的精度或小数点后位数都是非法的,这是因为这些约束可以从实参中获得。 创建过程 过程的结构应具有下面所示的特征: 过程的例子-无参数的过程 例题1: 创建一个无参数过程,记录用户名和当前日期 CREATE OR REPLACE PROCEDURE log_execution IS BEGIN INSERT INTO log_table(user_id,log_date) VALUES(user,sysdate); END; 过程的例子-带参数的过程 例题2: 利用过程进行查询处理,获取一个雇员的姓名、工资、奖金信息。 过程的运行、删除命令 运行过程的命令格式: SQL EXECUTE 过程名[(参数. . .)]; 过程的例子 例题2执行结果: 过程的例子-有用户自定义的异常情况的过程 例题3 在过程中处理异常情况。删除指定雇员,如果没有该雇员,就触发异常处理。 过程的例子 例题3执行结果: 过程的例子-用户自定义异常错误信息的过程 在处理异常情况中,利用RAISE_APPLICATION_ERROR过程,可以返回给调用者一个特定的错误信息和出错代码。 第四章过程、函数和程序包 (教材第8章) 过程与函数的比较 函数与过程基本类似,只不过调用时函数要用表达式方式,而过程只需调用过程名。 创建函数的语法 CREATE [OR REPLACE] FUNCTION 函数名 [(参数名 [ IN ] 数据类型. . .)] RETURN 数据类型 IS | AS [ 说明部分] BEGIN 语句序列
显示全部
相似文档