《ORACLE常用对象.ppt》由会员分享,可在线阅读,更多相关《ORACLE常用对象.ppt(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 本节根据本节根据Oracle的特点,介绍的特点,介绍Oracle的一些对象,如的一些对象,如存储过程、函数、触发器、包、序号生成器等存储过程、函数、触发器、包、序号生成器等。8.5.1 存储过程存储过程8.5.2 触发器触发器8.5.3 用户自定义函数用户自定义函数8.5.4 包包8.5.5 序号生成器序号生成器8.5 Oracle常用对象常用对象第第8章章 ORACLE 数据库数据库2 Oracle 中的存储过程由中的存储过程由SQL语句和一些控制流语句组成并封装语句和一些控制流语句组成并封装起来,经编译和优化后存储在数据库服务器中,使用时只需调用。起来,经编译和优化后存储在数据库服务器中
2、,使用时只需调用。使用存储过程有如下优点:使用存储过程有如下优点:(1)存储过程功能全面、接口灵活。存储过程功能全面、接口灵活。(2)可减少网络数据传输量。可减少网络数据传输量。(3)可减少调用延迟,提高程序的执行效率。可减少调用延迟,提高程序的执行效率。(4)可保证数据的安全性和完整性。可保证数据的安全性和完整性。(5)可维护性好。)可维护性好。8.5.1 存储过程存储过程第第8章章 ORACLE 数据库数据库31存储过程的建立存储过程的建立 CREATE OR REPLACE PROCEDURE procedure_name(argument IN|OUT|IN OUT datatype
3、argument IN|OUT|IN OUT datatype)IS|AS declaration_statements BEGIN Executable_statements EXCEPTION exception-handler_statemebts END procedure_name;第第8章章 ORACLE 数据库数据库42存储过程的重新编译与删除存储过程的重新编译与删除(1)存储过程的重新编译)存储过程的重新编译 虽然用虽然用CREATE OR REPLACE 命令可以重新编译存储过程,命令可以重新编译存储过程,但还有一种方法不需要有源程序的拷贝就可重新编译存储过程,其但还有一种方
4、法不需要有源程序的拷贝就可重新编译存储过程,其命令格式为:命令格式为:ALTER PROCEDURE procedure_name COMPILE;当存储过程引用的对象的某种方式发生改变时,这时当存储过程引用的对象的某种方式发生改变时,这时Oracle不不能确定其状态,存储过程被标记为无效,但使用该方法能很快解决能确定其状态,存储过程被标记为无效,但使用该方法能很快解决问题。问题。(2)存储过程的删除存储过程的删除DROP PROCEDURE procedure_name第第8章章 ORACLE 数据库数据库53存储过程的调用存储过程的调用(1)参数表示法)参数表示法名表示法名表示法:其格式如
5、下:其格式如下:argument _name=argument _value 参数的位置不需要与存储过程中参数的定义顺序一致。参数的位置不需要与存储过程中参数的定义顺序一致。位置表示法位置表示法:调用有参数的存储过程时,参数值的顺序与存储过程中参数定调用有参数的存储过程时,参数值的顺序与存储过程中参数定义的顺序应一致。义的顺序应一致。第第8章章 ORACLE 数据库数据库6(2)PL/SQL对象或匿名对象或匿名PL/SQL块调用块调用 在在PL/SQL对象或匿名对象或匿名PL/SQL块调用存储过程与调用块调用存储过程与调用Oracle内内部函数方法一致,其格式为:部函数方法一致,其格式为:pr
6、ocedure_name(argument _name=argument _value,argument _name=argument _value,)或或procedure_name(argument _value1,argument _value2,)第第8章章 ORACLE 数据库数据库7 触发器是一种特殊类型的存储过程,主要用于维护数据库中的触发器是一种特殊类型的存储过程,主要用于维护数据库中的表。它有以下作用:表。它有以下作用:(1)安全性)安全性(2)审计)审计(3)实现复杂的数据完整性规则)实现复杂的数据完整性规则(4)实现复杂非标准的数据库的相关完整性规则)实现复杂非标准的数据
7、库的相关完整性规则8.5.2 触发器触发器第第8章章 ORACLE 数据库数据库81触发器的建立触发器的建立CREATE OR REPLACE TRIGGER trigger_name BEFORE|AFTER|INSTEAD OF DELETE|INSERT|UPDATE OF column,columnOR DELETE|INSERT|UPDATE OF column,column ON table_name REFERENCING OLD AS old1|NEW AS new1 FOR EACH ROW|statement WHEN conditionIS|ASdeclaration_s
8、tatementsBEGINExecutable_statements EXCEPTION exception-handler_statemebts第第8章章 ORACLE 数据库数据库9注意:注意:(1)触发器中不能对与触发器定义所在表相关的表进行操作。)触发器中不能对与触发器定义所在表相关的表进行操作。(2)触发器中不能使用)触发器中不能使用COMMIT、ROLLBACK及与之相关的语句,及与之相关的语句,如果触发器调用含有这类语句的存储过程也可能出现问题。如果触发器调用含有这类语句的存储过程也可能出现问题。(3)在建立触发器时应避免循环触发,即建立在表)在建立触发器时应避免循环触发,即建
9、立在表A上的触发器对上的触发器对表表B进行某种操作,而建立在表进行某种操作,而建立在表B的触发器对表的触发器对表A进行同种操作。进行同种操作。第第8章章 ORACLE 数据库数据库102触发器的重新编译与删除触发器的重新编译与删除(1)触发器的重新编译)触发器的重新编译 虽然用虽然用CREATE OR REPLACE 命令可以重新编译触发器,但命令可以重新编译触发器,但还有一种方法不需要有源程序的拷贝就可重新编译触发器,其命令还有一种方法不需要有源程序的拷贝就可重新编译触发器,其命令格式为:格式为:ALTER TRIGGER trigger_name COMPILE;(2)触发器的删除触发器的
10、删除 如果一个创建的触发器不再需要了,可使用下列命令删除如果一个创建的触发器不再需要了,可使用下列命令删除:DROP TRIGGER trigger_name第第8章章 ORACLE 数据库数据库11 Oracle虽然有许多内置函数,但这些函数并不能完全满足用户虽然有许多内置函数,但这些函数并不能完全满足用户的要求。用户有时进行大量相同类型的计算,但没有的要求。用户有时进行大量相同类型的计算,但没有Oracle内置函内置函数可供使用。数可供使用。Oracle提供了用户自定义函数功能。用户自定义函数提供了用户自定义函数功能。用户自定义函数作为一个命名的程序单元,可带参数,并可返回一个计算值。利用
11、作为一个命名的程序单元,可带参数,并可返回一个计算值。利用函数可完成指定的任务并提高模块的可靠性、减少开发时间。函数可完成指定的任务并提高模块的可靠性、减少开发时间。8.5.3 用户自定义函数用户自定义函数第第8章章 ORACLE 数据库数据库121函数的建立函数的建立CREATE OR REPLACE FUNCTION function_name(argument IN|OUT|IN OUT datatype argument IN|OUT|IN OUT datatype)RETURN datatypeIS|AS declaration_statementsBEGIN Executable_
12、statements EXCEPTION exception-handler_statemebtsEND;第第8章章 ORACLE 数据库数据库132函数的重新编译与删除函数的重新编译与删除(1)函数的重新编译)函数的重新编译 虽然用虽然用CREATE OR REPLACE 命令可以重新编译函数,但还命令可以重新编译函数,但还有一种方法不需要有源程序的拷贝就可重新编译函数,其命令格式有一种方法不需要有源程序的拷贝就可重新编译函数,其命令格式为:为:ALTER FUNCTION function_name COMPILE;(2)函数的删除函数的删除 如果一个创建的函数不再需要了,可使用下列命令删
13、除:如果一个创建的函数不再需要了,可使用下列命令删除:DROP FUNCTION function_name第第8章章 ORACLE 数据库数据库143函数的调用函数的调用 函数一般是被系统的客户机端调用,但有时也被其它函数一般是被系统的客户机端调用,但有时也被其它Oracle对对象或匿名象或匿名PL/SQL块调用。利用不同的系统开发工具,对函数的调用块调用。利用不同的系统开发工具,对函数的调用方式也略有不同。方式也略有不同。(1)参数表示法)参数表示法 与存储过程一样,函数的参数也有两种表示法:名表示法和位与存储过程一样,函数的参数也有两种表示法:名表示法和位置表示法。置表示法。(2)PL/
14、SQL对象或匿名对象或匿名PL/SQL块调用块调用 在在PL/SQL对象或匿名对象或匿名PL/SQL块调用函数与调用块调用函数与调用Oracle内部函内部函数方法一致。可将函数值赋给一个变量,也可以在数方法一致。可将函数值赋给一个变量,也可以在SQL语句中使用语句中使用内置函数的地方使用自定义函数。内置函数的地方使用自定义函数。第第8章章 ORACLE 数据库数据库15 包是一种数据库对象,它将其逻辑相关的包是一种数据库对象,它将其逻辑相关的PL/SQL类型、存储过类型、存储过程、函数等对象组合在一起。具有如下特点:程、函数等对象组合在一起。具有如下特点:(1)可将逻辑上相关的类型、对象、函数
15、、存储过程封闭在一个命)可将逻辑上相关的类型、对象、函数、存储过程封闭在一个命名的名的PL/SQL块内。块内。(2)使应用程序的设计更容易。)使应用程序的设计更容易。(3)隐藏信息)隐藏信息(4)具有更好的性能)具有更好的性能8.5.4 包包第第8章章 ORACLE 数据库数据库161 包说明包说明 包说明为应用程序的接口包说明为应用程序的接口。建立包说明的语法为:建立包说明的语法为:CREATE OR REPLACE PACKAGE package_name IS|AS 变量说明;变量说明;游标说明;游标说明;例外说明;例外说明;函数说明;函数说明;存储过程说明;存储过程说明;END;第第8
16、章章 ORACLE 数据库数据库17 2包体包体 包体包括在包说明中定义的存储过程和函数。语法为:包体包括在包说明中定义的存储过程和函数。语法为:CREATE OR REPLACE PACKAGE package_name IS|AS 变量说明;变量说明;游标说明;游标说明;例外说明;例外说明;函数体;函数体;存储过程体;存储过程体;END;第第8章章 ORACLE 数据库数据库183 包中函数与存储过程的调用包中函数与存储过程的调用(1)在另一存储过程中调用包中存储过程)在另一存储过程中调用包中存储过程 包名包名.存储过程名(实际参数);存储过程名(实际参数);(2)在在PL/SLQ中调用包
17、中存储过程中调用包中存储过程 EXECTE 包名包名.存储过程名(实际参数);存储过程名(实际参数);(3)包中函数的调用)包中函数的调用 与与Oracle内置函数调用方法一致,但应在函数名前加上包名。内置函数调用方法一致,但应在函数名前加上包名。第第8章章 ORACLE 数据库数据库19 在很多应用系统中要用到序号,如仓储管理中入库与出库的流在很多应用系统中要用到序号,如仓储管理中入库与出库的流水号等。水号等。Oracle提供了一个序号对象,通过序号对象可自动生成序提供了一个序号对象,通过序号对象可自动生成序号,多个用户可并发读取,无需相互等待。其命令格式为:号,多个用户可并发读取,无需相互等待。其命令格式为:CREATE SEQUENCE sequence_name INCREMENT BY integer START WITH integer MAXVALUE integer|NOMAXVALUE MINVALUE integer|NOMINVALUE CYCLE|NOCYCLE CACHE integer|NOCACHE ORDER|NOORDER 8.5.5 序号生成器序号生成器
限制150内