1 / 19

8.5 Oracle 常用对象

8.5 Oracle 常用对象. 本节根据 Oracle 的特点,介绍 Oracle 的一些对象,如存储过程、函数、触发器、包、序号生成器等 。 8.5.1 存储过程 8.5.2 触发器 8.5.3 用户自定义函数 8.5.4 包 8.5.5 序号生成器. 8.5.1 存储过程. Oracle 中的存储过程由 SQL 语句和一些控制流语句组成并封装起来,经编译和优化后存储在数据库服务器中,使用时只需调用。使用存储过程有如下优点: ( 1 ) 存储过程功能全面、接口灵活。 ( 2 ) 可减少网络数据传输量。

Download Presentation

8.5 Oracle 常用对象

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 8.5 Oracle常用对象 • 本节根据Oracle的特点,介绍Oracle的一些对象,如存储过程、函数、触发器、包、序号生成器等 。 • 8.5.1 存储过程 • 8.5.2 触发器 • 8.5.3 用户自定义函数 • 8.5.4 包 • 8.5.5 序号生成器

  2. 8.5.1 存储过程 • Oracle 中的存储过程由SQL语句和一些控制流语句组成并封装起来,经编译和优化后存储在数据库服务器中,使用时只需调用。使用存储过程有如下优点: • (1) 存储过程功能全面、接口灵活。 • (2) 可减少网络数据传输量。 • (3) 可减少调用延迟,提高程序的执行效率。 • (4) 可保证数据的安全性和完整性。 • (5)可维护性好。

  3. 1.存储过程的建立 • CREATE [OR REPLACE] PROCEDURE procedure_name [(argument [IN|OUT|IN OUT] datatype [argument [IN|OUT|IN OUT] datatype]…)] • IS|AS • [declaration_statements] • BEGIN • Executable_statements • [EXCEPTION • exception-handler_statemebts] • END [procedure_name];

  4. 2.存储过程的重新编译与删除 • (1)存储过程的重新编译 • 虽然用CREATE OR REPLACE 命令可以重新编译存储过程,但还有一种方法不需要有源程序的拷贝就可重新编译存储过程,其命令格式为: • ALTER PROCEDURE procedure_name COMPILE; • 当存储过程引用的对象的某种方式发生改变时,这时Oracle不能确定其状态,存储过程被标记为无效,但使用该方法能很快解决问题。 • (2) 存储过程的删除 • DROP PROCEDURE procedure_name

  5. 3.存储过程的调用 • (1)参数表示法 • 名表示法: • 其格式如下: • argument _name=> argument _value • 参数的位置不需要与存储过程中参数的定义顺序一致。 • 位置表示法: • 调用有参数的存储过程时,参数值的顺序与存储过程中参数定义的顺序应一致。

  6. (2)PL/SQL对象或匿名PL/SQL块调用 • 在PL/SQL对象或匿名PL/SQL块调用存储过程与调用Oracle内部函数方法一致,其格式为: • procedure_name (argument _name=> argument _value [,argument _name=> argument _value[,…]]) • 或 • procedure_name(argument _value1[,argument _value2[,…]])

  7. 8.5.2 触发器 • 触发器是一种特殊类型的存储过程,主要用于维护数据库中的表。它有以下作用: • (1)安全性 • (2)审计 • (3)实现复杂的数据完整性规则 • (4)实现复杂非标准的数据库的相关完整性规则

  8. 1.触发器的建立 • CREATE [OR REPLACE] TRIGGER trigger_name BEFORE|AFTER|INSTEAD OF DELETE|INSERT|UPDATE [OF column[,column]…][OR DELETE|INSERT|UPDATE [OF column[,column]…]… ON table_name [[REFERENCING OLD [AS] old1|NEW [AS] new1] FOR EACH ROW|statement [WHEN condition] • IS|AS • [declaration_statements] • BEGIN • Executable_statements • [EXCEPTION • exception-handler_statemebts]

  9. 注意: • (1)触发器中不能对与触发器定义所在表相关的表进行操作。 • (2)触发器中不能使用COMMIT、ROLLBACK及与之相关的语句,如果触发器调用含有这类语句的存储过程也可能出现问题。 • (3)在建立触发器时应避免循环触发,即建立在表A上的触发器对表B进行某种操作,而建立在表B的触发器对表A进行同种操作。

  10. 2.触发器的重新编译与删除 • (1)触发器的重新编译 • 虽然用CREATE OR REPLACE 命令可以重新编译触发器,但还有一种方法不需要有源程序的拷贝就可重新编译触发器,其命令格式为: • ALTER TRIGGER trigger_name COMPILE; • (2) 触发器的删除 • 如果一个创建的触发器不再需要了,可使用下列命令删除: • DROP TRIGGER trigger_name

  11. 8.5.3 用户自定义函数 • Oracle虽然有许多内置函数,但这些函数并不能完全满足用户的要求。用户有时进行大量相同类型的计算,但没有Oracle内置函数可供使用。Oracle提供了用户自定义函数功能。用户自定义函数作为一个命名的程序单元,可带参数,并可返回一个计算值。利用函数可完成指定的任务并提高模块的可靠性、减少开发时间。

  12. 1.函数的建立 • CREATE [OR REPLACE] FUNCTION function_name [(argument [IN|OUT|IN OUT] datatype [argument [IN|OUT|IN OUT] datatype]…)] RETURN datatype • IS|AS • [declaration_statements] • BEGIN • Executable_statements • [EXCEPTION • exception-handler_statemebts] • END;

  13. 2.函数的重新编译与删除 • (1)函数的重新编译 • 虽然用CREATE OR REPLACE 命令可以重新编译函数,但还有一种方法不需要有源程序的拷贝就可重新编译函数,其命令格式为: • ALTER FUNCTION function_name COMPILE; • (2) 函数的删除 • 如果一个创建的函数不再需要了,可使用下列命令删除: • DROP FUNCTION function_name

  14. 3.函数的调用 • 函数一般是被系统的客户机端调用,但有时也被其它Oracle对象或匿名PL/SQL块调用。利用不同的系统开发工具,对函数的调用方式也略有不同。 • (1)参数表示法 • 与存储过程一样,函数的参数也有两种表示法:名表示法和位置表示法。 • (2)PL/SQL对象或匿名PL/SQL块调用 • 在PL/SQL对象或匿名PL/SQL块调用函数与调用Oracle内部函数方法一致。可将函数值赋给一个变量,也可以在SQL语句中使用内置函数的地方使用自定义函数。

  15. 8.5.4 包 • 包是一种数据库对象,它将其逻辑相关的PL/SQL类型、存储过程、函数等对象组合在一起。具有如下特点: • (1)可将逻辑上相关的类型、对象、函数、存储过程封闭在一个命名的PL/SQL块内。 • (2)使应用程序的设计更容易。 • (3)隐藏信息 • (4)具有更好的性能

  16. 1. 包说明 • 包说明为应用程序的接口。建立包说明的语法为: • CREATE [OR REPLACE] PACKAGE package_name IS|AS • 变量说明; • 游标说明; • 例外说明; • 函数说明; • 存储过程说明; • END;

  17. 2.包体 • 包体包括在包说明中定义的存储过程和函数。语法为: • CREATE [OR REPLACE] PACKAGE package_name IS|AS • 变量说明; • 游标说明; • 例外说明; • 函数体; • 存储过程体; • END;

  18. 3. 包中函数与存储过程的调用 • (1)在另一存储过程中调用包中存储过程 • 包名. 存储过程名(实际参数); • (2) 在PL/SLQ中调用包中存储过程 • EXECTE 包名. 存储过程名(实际参数); • (3)包中函数的调用 • 与Oracle内置函数调用方法一致,但应在函数名前加上包名。

  19. 8.5.5 序号生成器 • 在很多应用系统中要用到序号,如仓储管理中入库与出库的流水号等。 Oracle提供了一个序号对象,通过序号对象可自动生成序号,多个用户可并发读取,无需相互等待。其命令格式为: • CREATE SEQUENCE sequence_name [ INCREMENT BY integer] [START WITH integer] [ MAXVALUE integer | NOMAXVALUE] [ MINVALUE integer | NOMINVALUE] [CYCLE | NOCYCLE] [ CACHE integer | NOCACHE ] [ORDER | NOORDER]

More Related