PL/SQL的过程、函数、程序包和数据库触发器(十一)
文章内容:/的过程,函数,程序包和数据库触发器(十一)王兰成(解放军南京政治学院上海分院)在了解/语言的基础上,现在我们学习用/创建不同类型的程序,其中包括匿名/块,过程,函数,程序包和数据库触发器.26匿名/块,存储过程和函数前面的例子涉及的都是匿名/块.出现在应用程序中的匿名块是/块,匿名块没有名称,且不为后续的重用进行存储.应用程序在运行时简单地发送该代码块到数据库服务器进行处理.一旦服务器执行了匿名块,该块将不再存在.存储过程和函数一般在/块内部声明和使用子程序(过程和函数),以封装频繁使用的任务.子程序()是一个命名的/程序,它可以获得参数并反复接受调用来执行任务.我们还可以将过程和函数作为应用程序逻辑的编译代码,以命名模式对象存储在数据库的内部.集中在数据库中的常用过程和函数,任何应用程序都可使用它们来完成工作.存储过程和函数的合理使用可增加开发人员的生产力,并简化应用程序的开发.27存储过程和函数的使用下面的例子将说明怎样在数据库中创建存储过程和函数.例:输入下列程序,熟悉在0数据库中创建和存储常见的过程.】.(,'.'1厂旺.<>43..1..—();;_._(");.;注意,如果用缺省的选项创建过程,则使用过程所有者的特权域执行该过程.为了成功执行过程,过程的所有者必须具有访问在该存储过程体中引用的所有数据库对象所必需的特权.要想简化应用程序用户的特权管理,在创建存储过程时,一般应选择缺省的选项.这样,就不必授权给需要调用此过程的所有用户了.通过调用数据库中的该存储过程,就可以在任何其他/程序中使用过程.例2:输入以下匿名/块,它使用了存储过程.玎(40,);,在一行中打印4个号,;(&;20,≥'=');,枣在一行中打印20个=号,;玳(10);在一行中打印0个?号,;该程序的输出结果如下:宰宰串宰宰宰宰宰-●宰宰宰宰宰宰枣宰宰事宰宰宰宰宰-率宰宰宰枣宰串宰事宰宰宰/././?为了在数据库中创建存储函数,可使用命令.指定一个函数,就像在/块的声明部分所指定的一样,但不要忘记声明该函数的返回类型,以及在函数体中使用一个或多个语句以返回该函数的返回值.例3:输入下列程序,熟悉在数据库中创建和存储函数.()'【瓜口<>44.;;..),,】巳._=._=..;【];;例4:输入下列查询,它使用函数返回合计超过5000元的所有订单的)和订单日期.&;,()&;5:该结果如下:)刚118.6月.9959.6月.991021.6月.991122.6月.991228程序包的使用程序包是一组过程,函数和其他/结构,它们都作为—个单元被存储在数据库中.程序包对于组织与某个特定数据库应用程序有关的大量的/过程和函数特别有用.提供若干附加功能的,/不提供的预建实用程序包,比如前面用到过的_'就是.表1列出了81提供的几个预建立程序包:表181提供的几个预建立程序包程序包名描述_允许应用程序不用轮询法技术命名和发出更改条件信号的过程和函数_.排队等待事物处理执行的和管理员队列机制的过程和函数_提供在程序内对有限数量的语句访问的过程.<>45..程序包名描述实用程序库_;描述存储过程和函数的过程管理数据库作业队列机制的过程和函数_操纵,,和的过程和函数_允许应用程序对共享资源协同访问的过程和函数_允许_/程序生成最终输出结果的过程和函数_允许数据库会话使用管道(通信信道)进行通信的过程和函数_允许应用程序解释基于64字符的外部的过程和函数—控制一个应用程序用户会话的过程和函数'_从程序内部执行动态的过程和函数_执行有限数量的事务处理控制的过程和函数_允许程序读写文本文件到服务器的文件系统中的过程和函数29数据库触发器的使用数据库触发器()是一个与特定表相连的存储过程.当应用程序用一条满足触发器执行条件的语句指向该表时,将自动启动(执行)该触发器以执行任务.所以,可以使用触发器定制数据库服务器对应用程序事件的反应.要创建数据库触发器,应使用命令6.命令的基本语法如下:[]1[[,】…1)[】】..<>/...[]触发器的定义包含一个启动触发器的触发器语句清单,其中包括和.一个触发器仅仅与一个表相连;触发器可以设置在该触发器语句之前或之后启动,以提供特殊的应用程序逻辑:触发器的定义表明该触发器是语句触发器还是行触发器.例5:创建和使用数据库触发器输入下列语句创建一个触发器,该触发器自动记录对表所做的有关更改方面的某些基本信息.触发器是语句后(-)触发器,即在触发了该语句之后进行启动,而不管该触发器语句影响多少行.<>..<>46..(;玎【ⅱ旺,『:='':1:=''::='':;(,,);;在触发器中,当一个触发器允许不同类型的语句启动该触发器时,,和谓词允许条件语句标识实际启动该触发器的语句类型.例6:下面创建触发器,它是行前(-)触发器,用来记录有关指向表的更改的详细信息.ⅱ(,,:.,:.,:.,:.,".,:.,:.0,:..:.,:.);;在触发器中,"和:的相关值允许行触发器访问当前行的新的和旧的字段值.当触发器语句是语句时,所有旧字段值为空.同样,当触发器语句是语句时,所有新字段的值为空.最后,测试一下新的触发器,看看它们实际做了什么.例7:输入下列在表中插入,更新和删除行的语句,然后查看和ⅱ1表.(6,'',49,1200,500);.<>47..=——10;=6:;,,,;查询的结果如下:●●…●●●……●●●●●●●-…●…●…●●●…●●.9月.1.9月..9月.,ⅳ0【)0623456200267133762158934801190234566277143763159034902001190触发器是在当前事务处理的上下文环境中执行的,因此,如果要回退当前的事务处理,随后查询和时,会得到"1"的消息.<>48.(未完待续)
149210-27-86032Y-200404-23416912-4005eb14