Logo存储过程与自定义函数本章目标存储程序的应用函数的应用RETURN语句过程和函数的参数模式查看存储子程 序的错误存储子程序的优点存储过程执行特定操作的子程序存储于数据库中并可由任意匿名块调用能够接受参数在参数声明中的 数据类型区分符应为无限制的存储过程(续)具有两个部分说明以关键字PROCEDURE开始,以过程名或参数列表结束 主体以关键字IS开始,以关键字END结束,后面可以跟可选过程名称存储过程(续)CREATE[ORREPLAC E]PROCEDURE<过程名>[(参数1,…参数N)]IS|AS[局部声明]BEGIN可执行语句;EXCE PTION [例外处理程序];END[<过程名>];参数代表变量名[IN|OUT|INOUT]数据类型[{ :=|DEFAULT}值]存储过程(续)示例CREATEPROCEDUREbranch_sum(p_brnc hbranch.branch_code%TYPE)ISdeclarevariables;BEGIN可执行语句;EX CEPTIONWHENNO_DATA_FOUNDTHEN语句;ENDbranch_sum;存储过程(续)创建过程 时,Oracle自动执行下列步骤编译过程存储所编译的代码在数据库中存储过程PL/SQL编译程序用于编译代码如果 发生错误,也可创建过程,但是无效存储过程(续)可以使用SHOWERRORS命令或下列命令查看编译错误SELECT FROMUSER_ERRORS;Oracle将编译过程装入SGA中其他用户也可以执行存储在SGA中的相同过 程存储过程(续)Oracle分三个步骤执行过程验证用户访问如果为非法用户,则拒绝访问验证过程有效性如果为非法过程, 则不执行执行过程可以通过下列方式检查过程的有效性SELECTOBJECT_NAME,OBJECT_TYPE,STAT USFROMUSER_OBJECTSWHEREOBJECT_TYPE=‘PROCEDURE’;存储过程的优点增强 了数据安全性可以授权用户访问能执行表的存储过程,但不授权他们访问表自身提高了数据库性能通过网络发送的信息有所减少编译 不需要执行代码过程存在于共享池中,所以不需要进行磁盘检索存储过程的优点(续)节省内存只需要在内存中装入过程的一个拷 贝便可供多个用户执行提高了开发的工作效率通过编写单一的过程可以避免冗余程序代码,并且提高了生产效率完整性只需要测试 一次,以保证它能够返回正确的结果调用存储过程可以作为PL/SQL语句调用过程示例branch_sum(‘NYK’ );可以从SQLPlus中调用单独的过程示例SQL>EXECUTEbranch_sum(‘NYK’);函数 返回值的子程序具有一个RETURN子句存储于数据库中并可由任意匿名程序块调用通常可以接受参数在参数声明中的数据 类型区分符应为无限制的函数(续)具有两个部分说明以关键字FUNCTION开始,以RETURN子句结束主体以 关键字IS开始,以关键字END结束,后面可以跟可选函数名称函数(续)CREATE[ORREPLACE]FUNCT ION<函数名>[(参数1,…参数N)]RETURNdatatypeIS|AS[局部声明]BEGIN可执行语 句;[EXCEPTION例外处理程序]END[<函数名>];参数代表的是变量名[IN|OUT|INOUT] 数据类型[{:=|DEFAULT}值函数(续)示例CREATEFUNCTIONday_fn(mdayN UMBER)RETURNCHARISdisp_dayCHAR(15);BEGIN可执行语句;RETURNdis p_day;EXCEPTION语句;ENDday_fn;调用函数作为PL/SQL语句调用函数示例cha rdays:=day_fn(3);作为表达式的一部分调用函数示例IFday_fn(3)=‘TUESDAY’TH EN语句;ENDIF;过程和函数的参数模式用于定义正式参数的行为可以与其他子程序一起使用三个参数模式IN (默认)OUTINOUT避免在函数中使用OUT和INOUT模型过程和函数的参数模式(续)IN允许将值传送到被调用的子程序在子程序内部,它的作用如同常数实际对应参数可以是一个常数、数据量、初始化变量或表达式可以被初始化为默认值Logo |
|