1. 首页
  2. IT资讯

PLSQL Language Reference-PL/SQL概览-PL/SQL的主要功能

PL/SQL的主要功能

PL/SQL结合了SQL的数据操作能力和过程语言的处理能力。

当可以使用SQL解决问题时,可以从PL/SQL程序执行SQL语句,而不用学习新的API

像其它的过程处理语言一样,PL/SQL允许声明常量、变量、控制程序流向、定义子程序、捕获运行时错误。

可以将复杂的问题拆分成小的容易解决的子程序,可以在多个应用程序中复用。

错误处理

PL/SQL使得检测和处理错误非常容易。当错误发生时,PL/SQL产生一个异常。正常的执行停止,控制转向PL/SQL块的异常处理部分。你不需要每个操作来确保它成功,就像在C程序中一样。

PL/SQL源代码的基本单位是块。它把相关的声明和语句组织到一起。

一个PL/SQL块由下面的关键字来定义:

declare

begin

exception

end;

一个PL/SQL3部分组成:声明部分,执行部分,异常处理部分。只有执行部分是必须的。

块中还可以包括标签。

<< label >> (可选的)

declare 声明部分(可选)

本地变量、类型和子程序的声明

begin 执行部分(必须的)

语句 (可以使用声明部分的成员)

exception 异常处理部分(可选)

对于执行部分产生的异常进行处理

end;

声明部分对于块是本地可见的,块执行结束后就消失了,用于帮助避免变量和子程序的杂乱的命名空间。

块可以嵌套。因为块是一个可执行的声明,所以它可以出现在其它块中可执行语句出现的地方。

可以把块提交给交互式工具(如SQL*PlusEnterprise Manager)或把它嵌入到Oracle预编译程序或OCI程序中。然后交互式工具或程序运行块一次。块不被存储到数据库中,因此这种块被称为匿名块(即使它有标签)。注意:一个匿名块是一个SQL语句。

匿名块每次都被编译并被加载到内存,它的编译过程有3个阶段:

n 语法检查:PL/SQL语法被检查,解析树被生成。

n 语义检查:类型检查并进一步处理解析树。

n 生成代码。

变量和常量

可以定义常量和变量。在程序运行时变量的值可以改变,而常量不可以。

子程序

PL/SQL子程序是一个可以被重复调用的命名块。如果子程序有参数,每次调用时参数可以不同。

PL/SQL2种类型的子程序:过程和函数。函数有返回值。

PL/SQL也可以调用使用其它语言书写的外部程序。

包是一个方案对象,用于在逻辑上组织相关的类型、变量、常量、子程序、光标和异常。包被编译并存储在数据库中,多个应用程序可以共享它的内容。可以把包看作是一个应用程序。

可以书写自己的包,也可以使用Oracle提供的许多特定包。

触发器

触发器是命名的PL/SQL单元,存储在数据库中,并在数据库事件发生时做为响应而运行。

可以指定事件、在事件之前还是之后触发、是每事件运行一次还是每行运行一次。

输入输出

大多数的PL/SQL输入、输出都是通过SQL语句来完成,这些SQL语句在数据库表中存储数据或查询这些表。

所有其它的PL/SQL I/O都是通过下面的包来完成的。

dbms_output

PL/SQL块、包、子程序、触发器输出。尤其是输出PL/SQL调试信息。

htf

超文本函数,产生HTML标签(例,htf.anchor产生标签)

htp

超文本过程,产生HTML标签

dbms_pipe

允许相同实例中的2个或多个会话进行通信

utl_file

读写操作系统文件

utl_http

进行HTTP协议调用,和通过HTTP协议访问internet上的数据。

utl_smtp

通过RFC821描述的SMTP协议发送电子邮件

如果想显示传递给dbms_output的输出,需要其它的程序,例如SQL*Plus,需要设置SQL*Plus参数set serveroutput on

上表包中的这些子程序可以接受输入和显示输出,但他们不能从键盘直接接受数据。

为了从键盘直接接受数据,需要使用SQL*Plus中的promptaccept命令。

数据抽象

使用数据抽象可以让你工作于数据的主要属性,而不必卷入到细节之中。可以先定义数据结构,然后设计算法来操作它。

1)光标

光标是指向私有SQL区的一个指针,SQL区域存储关于处理特定的SQL语句或PL/SQLselect into语句的信息。可以使用光标一次取得结果集中的行。可以使用光标属性获得光标的状态,例,SQL语句影响了多少行。

2)复合变量

复合变量拥有内部成员,可以单独访问。可以把复合变量作为参数整体传递给子程序。PL/SQL2种类型的复合变量:集合记录。在集合中,所有的内部成员都是相同类型被称作元素。可以通过唯一的下标来访问每个元素。链表和数组是典型的集合;在记录中,内部成员可以有不同的类型,被称作。通过名称访问每个域。一个记录变量可以用来保存表中的一行,表一行中的部分列。

3%rowtype属性

可以用来声明一个记录来表示表或视图一行或行的一部分。对于一行或一行的一部分的每个列,记录都有一个具有相同名称和类型的域。如果行的结构改变了,则记录的结构会相应的改变。

4%type属性

可以用来声明与先前声明的变量或列具有相同数据类型的数据元素,而不需要知道具体是什么类型。如果被引用的成员改变了,则声明的成员随之改变。该属性在声明变量保存数据库值的时候非常有用。

5)抽象数据类型

抽象数据类型包含数据结构和处理数据的子程序。构成数据结构的变量称为属性。操作属性的子程序称为方法

ADT被存储在数据库中,ADT的实例可以被存储在表中,作为PL/SQL变量来使用。

ADT可以通过将大的系统分割成可重用小的逻辑组件来降低复杂性。

在数据字典视图*_OBJECTSobject_type的值为type;在数据字典视图*_TYPESTYPECODE的值是object

控制语句

控制语句是PL/SQLSQL最重要的扩展。

n 条件选择语句:根据不同的数据值运行不同的语句

n 循环语句:为一系列不同的值重复执行相同的语句

n 顺序控制语句:允许跳转到特定的标签语句,或什么都不做。

条件编译

条件编译允许在PL/SQL应用中自定义功能而不用移除源代码:

n 可以使用新版本中的新功能,而在老版本的数据库中运行应用时禁用。

n 在开发环境中激活调试和跟踪语句,当在生产性站点运行程序时隐藏他们。

一次一行处理查询结果集

PL/SQL允许执行一个SQL查询,并一次处理结果集中的一行。

begin

for someone in (select * from employees where employee_id < 120 order by employee_id)

loop

dbms_output.put_line(‘First name = ‘ || someone.first_name ||

‘, Last name = ‘ || someone.last_name);

end loop;

end;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1102563/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:布吉卡,转转请注明出处:http://www.cxybcw.com/194490.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code