- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第章存储过程和触发器
存储过程和触发器
学习目标:
了解存储过程和触发器的概念。
了解存储过程和触发器类型。
掌握存储过程和触发器定义方法。
了解存储过程和触发器在程序中的应用。
存储过程(过程)和触发器都是PL/SQL语言中的概念,它们都是用户利用PL/SQL语言所提供的结构化编程语言的思想,自己编写、命名的程序块。
使用存储过程可以实现过程的抽象和数据的隐藏。用户只需要知道过程的名称、参数、返回值等外部特征,就可以使用参数调用过程,最后利用返回数据即可。
触发器是当特殊事件发生时自动执行的代码块,是特殊的存储过程,用户不能直接调用触发器。使用触发器可以大大增强Oracle的功能。
本章将分别讨论存储过程和触发器的概念以及其创建与使用方法。
存储过程
在Oracle中,可以在数据库中定义的子程序,这种程序块称为存储过程(Procedure)。它的定义存储在在数据字典中,可以在不同用户和应用程序之间共享,并可实现程序的优化和重用。
存储过程的主要作用有:
(1)过程在服务器端运行,执行速度快。
(2)过程执行一次后代码就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译代码执行,提高了系统性能。
(3)确保数据库的安全。可以不授权用户直接访问应用程序中的一些表,而是授权用户访问这些表的存储过程。非表的授权用户除非通过存储过程,否则不能访问这些表。
(4)自动完成需要预先执行的任务。存储过程可以在系统启动时自动执行,而不必在系统启动后再进行手工操作,大大方便了用户的使用,可以自动完成一些需要预先执行的任务。
创建存储过程
用户存储过程只能定义在当前数据库中,可以通过CREATE PROCEDURE命令或OEM创建存储过程,创建存储过程用户要求具有相应的权限。在过程的定义中不能使用下列对象创建语句:
CREATE VIEW
CREATE DEFAULT
CREATE RULE
CREATE PROCEDURE
CREATE TRIGGER
创建和执行存储过程
创建存储过程
创建存储过程的基本语法如下:
CREATE [OR REPLACE] PROCEDURE [schema.]procedure_name /*定义过程名*/
[(parameter parameter_mode data_type,…n)]/*定义参数类型及属性*/
IS | AS
BEGIN
sql_statement
END procedure_name;
其中:
procedure_name:要创建的过程名,要求必须符合标识符规则。关键字OR REPLACE表示在创建过程时,如果已存在同名的过程,则重新创建。
schema:指定过程所属的用户方案。
parameter:过程的参数。参数名必须符合标识符规则,创建过程时,可以声明一个或多个参数,执行过程时应提供相对应的参数。
parameter_mode:表示参数的类型。过程参数和函数参数一样,也有3种类型:分别为IN、OUT和IN OUT,当指定参数数据类型时,不能指定其长度。
sql_statement:表示过程体包含的PL/SQL语句。
【例8.1】创建存储过程“print_current_time”,用于打印当前系统的时间。代码如下:
CREATE PROCEDURE print_current_time
AS
curtime VARCHAR2(20);
BEGIN
SELECT TO_CHAR(SYSDATE, yyyy/mm/dd hh24:mi:ss) INTO curtime FROM DUAL;
DBMS_OUTPUT.PUT_LINE(当前时间是:||curtime);
END print_current_time;
执行存储过程
创建过程之后即可执行过程。用户既可以从匿名PL/SQL程序块中直接调用,也可以在SQL*Plus中使用EXECUTE()函数来执行。基本语法如下:
EXEC[UTE] procedure_name[(parameter, …n)];
其中:
procedure_name:表示要执行的存储过程的名称。
parameter:表示参数值。
【例8.2】使用EXEC函数执行存储过程“print_current_time”,如图8.1所示。
注意运行:SET SERVEROUTPUT ON
图8.1使用EXEC执行过程“print_current_time”
【例8.3】使用匿名PL/SQL程序块执行过程“print_current_time”,如图8.2所示。
图8.2使用匿名PL/SQL程序块执行“print_current_time”过程
使用OEM创建存储过程
【例8.4】使用OEM创建存储过程“out_score_sql”,要求该存储过
文档评论(0)