计算机PLSQL程序设计_第1页
计算机PLSQL程序设计_第2页
计算机PLSQL程序设计_第3页
计算机PLSQL程序设计_第4页
计算机PLSQL程序设计_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PL/SQL程序设计

目录

第一章PL/SQL程序设计简介...................................................4

§1.2SQL与PL/SQL..........................................................................................................4

§1.2.1什么是PL/SQL?...................................................................................................4

§1.2.1PL/SQL的好处........................................................4

§1.2.2PL/SQL可用的SQL语句..............................................5

§1.3运行PL/SQL程序........................................................5

第二章PL/SQL块结构和组成元素...............................................6

§2.1PL/SQL块...............................................................6

§2.2PL/SQL结构.............................................................6

§2.3标识符..................................................................6

§2.4PL/SQL变量类型.........................................................7

§2.4.1变量类型.............................................................7

§2.4.2复合类型.............................................................9

§2.4.3使用%ROWTYPE...............................................................................................11

§2.4.4LOB类型*...........................................................11

§2.4.5BIND变量..........................................................11

§2.4.6INDEXBYTABLES.............................................................................................12

§2.4.7数据类型的转换*.....................................................13

§2.5运算符和表达式(数据定义)................................................13

§2.5.1关系运算符..........................................................13

§2.5.2一般运算符..........................................................13

§2.5.3逻辑运算符..........................................................14

§2.6变量赋值................................................................14

§2.6.1字符及数字运算特点..................................................14

§2.6.2BOOLEAN赋值.....................................................14

§2.6.3数据库赋值..........................................................15

§2.6.4可转换的类型赋值....................................................15

§2.7变量作用范围及可见性...................................................15

§2.8注释....................................................................16

§2.9简单例子................................................................17

§2.9.1简单数据插入例子....................................................17

§2.9.2简单数据删除例子....................................................17

第三章PL/SQL流程控制语句...................................................18

§3.1条件语句................................................................18

§3.2CASE表达式...........................................................19

§3.3循环....................................................................19

§3.3标号和GOTO............................................................................................................21

§3.4NULL语句.............................................................21

第四章游标的使用.............................................................23

-1-

2

§4.1游标概念.................................................................23

§4.1.1处理显式游标.........................................................23

§4.1.2处理隐式游标........................................................27

§4.1.3关于NO_DATA_FOUND和%NOTFOUND的区别......................28

§4.1.4游标修改和删除操作..................................................28

§4.2游标变量................................................................29

§4.2.1声明游标变量........................................................29

§4.2.2游标变量操作........................................................30

§4.2.3游标变量应用......................错误!未定义书签。错误!未定义书签。

第五章异常错误处理.........................................................33

§5.1异常处理概念.............................................................33

§5.1.1预定义的异常处理.....................................................33

§5.1.2非预定义的异常处理..................................................34

§5.1.3用户自定义的异常处理................................................35

§5.1.4用户定义的异常处理..................................................36

§5.2异常错误传播............................................................37

§5.2.1在执行部分引发异常错误..............................................38

§5.2.2在声明部分引发异常错误..............................................38

§5.3异常错误处理编程........................................................39

§5.4在PL/SQL中使用SQLCODE,SQLERRM..............................................................39

第六章存储函数和过程.........................................................41

§6.1引言....................................................................41

§6.2创建函数................................................................41

§6.3存储过程................................................................44

§6.3.1创建过程.............................................................44

§6.3.2调用存储过程........................................................46

§6.3.3开发存储过程步骤....................................................50

§6.3.4与过程相关数据字典..................................................51

第七章包的创建和应用.........................................................53

§7.1弓I言....................................................................53

§7.2包的定义................................................................53

§7.3包的开发步骤............................................................54

§7.4包定义的说明............................................................54

§7.5子程序重载..............................................................62

§7.6删除过程、函数和包......................................................64

§7.7包的管理................................................................65

第八章触发器.................................................................66

§8.1触发器类型..............................................................66

§8.1.1DML触发器..........................................................66

§8.1.2替代触发器..........................................................66

§8.1.3系统触发器..........................................................66

-2-

3

§8.2创建触发器..............................................................67

§8.2.1触发器触发次序......................................................68

§8.2.2创建DML触发器.....................................................68

§8.2.3创建替代(INSTEADOF)触发器.........................................69

§8.2.3创建系统事件触发器..................................................70

§8.2.4系统触发器事件属性..................................................71

§8.2.5使用触发器谓词......................................................72

§8.2.6重新编译触发器......................................................72

§8.3删除和使能触发器........................................................72

§8.4触发器和数据字典........................................................73

§8.5数据库触发器的应用举例..................................................73

§8.6数据库触发器的应用实例..................................................83

第九章ORACLE提供的常用包..................................................87

§9.1使用DBMS_SQL软件包..................................................87

§9.2使用EXECUTEIMMEDIATE语句..........................................88

§9.3使用DBMS_DDL软件包..................................................89

§9.4使用DBMS_JOB软件包编制工作调度......................................90

§9.5使用DBMSJDUTPUT软件包..............................................92

§9.6使用UTL_FILE软件包....................................................93

-3-

4

第一章PL/SQL程序设计简介

PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数

据库进行访问。山于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速

高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也

是该语言的一个特点。本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的主要特

点,以及了解PL/SQL语言的重要性和数据库版本问题。还要介绍一些贯穿全书的更详细的

高级概念,并在本章的最后就我们在本书案例中使用的数据库表的若干约定做一说明。

本章主要重点:

•PL/SQL概述

•PL/SQL块结构

•PL/SQL流程

•运算符和表达式

•游标

•异常处理

•数据库存储过程和函数

•包

•触发器

§1.2SQL与PL/SQL

§1.2.1什么是PL/SQL?

PL/SQL是ProcedureLanguage&StructuredQueryLanguage的缩写。ORACLE

的SQL是支持ANSI(AmericannationalStandardsInstitute)和ISO92(International

StandardsOrganization)标准的产品。PL/SQL是对SQL语言存储过程语言的扩展。从

ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语

言,简称PL/SQL。目前的PL/SQL包括两部分,•部分是数据库引擎部分;另一部分是可

嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为:数

据库PL/SQL和工具PL/SQL。两者的编程非常相似。都具有编程结构、语法和逻辑机制。

工具PL/SQL另外还增加了用于支持工具(如ORACLEForms)的句法,如:在窗体上设

置按钮等。本章主要介绍数据库PL/SQL内容。

§1.2.1PL/SQL的好处

§1.2.1.1有利于客户/服务器环境应用的运行

对于客户/服务器环境来说,真正的瓶颈是网络上。无论网络多快,只要客户端与服务

器进行大量的数据交换。应用运行的效率自然就会受到影响。如果使用PL/SQL进行编程,

将这种具有大量数据处理的应用放在服务器端来执行。自然就省去了数据在网上的传输时

间。

-4-

5

§适合于客户环境

PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL。对于客户端来说,PL/SQL可

以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL

命令或激活服务器端的PL/SQL程序运行。

§1.2.2PL/SQL可用的SQL语句

PL/SQL是。RACLE系统的核心语言,现在ORACLE的许多部件都是由PL/SQL写成。

在PL/SQL中可以使用的SQL语句有:

INSERT,UPDATE,DELETE,SELECTINTO,COMMIT,ROLLBACK,SAVEPOINTo

提示:在PL/SQL中只能用SQL语句中的DML部分,不能用DDL部分,如果要在

PL/SQL中使用DDL(如CREATEtable事的话,只能以动态的方式来使用。

•ORACLE的PL/SQL组件在对PL/SQL程序进行解释时,同时对在其所使用的

表名、列名及数据类型进行检查。

•PL/SQL可以在SQL*PLUS中使用。

•PL/SQL可以在高级语言中使用。

•PL/SQL可以在ORACLE的开发工具中使用。

•其它开发工具也可以调用PL/SQL编写的过程和函数,如PowerBuilder等都可以

调用服务器端的PL/SQL过程。

§1.3运行PL/SQL程序

PL/SQL程序的运行是通过ORACLE中的一个引擎来进行的。这个引擎可能在

ORACLE的服务器端,也可能在ORACLE应用开发的客户端。引擎执行PL/SQL中的过

程性语句,然后将SQL语句发送给数据库服务器来执行。再将结果返回给执行端。

-5-

6

第二章PL/SQL块结构和组成元素

§2.1PUSQL块

PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。

PL/SQL块的结构如下:

DECLARE

/*声明部分:在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数7

BEGIN

/*执行部分:过程及SQL语句,即程序的主要部分*/

EXCEPTION

/*执行异常部分:错误处理*/

END;

其中执行部分是必须的。

PL/SQL块可以分为三类:

1.无名块:动态构造,只能执行一次。

2.子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它

程序中调用它们。

3.触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

§2.2PL/SQL结构

•PL/SQL块中可以包含子块;

•子块可以位于PL/SQL中的任何部分;

•子块也即PL/SQL中的•条命令;

§2.3标识符

PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同。要求和限制有:

•标识符名不能超过30字符;

•第一个字符必须为字母;

•不分大小写;

•不能用(减号);

•不能是SQL保留字。

提示:一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果.

-6-

7

例如:下面的例子将会删除所有的纪录,而不是KING的记录;

DECLARE

enamevarchar2(20):='KING';

BEGIN

DELETEFROMempWHEREename=ename;

END;

变量命名在PL/SQL中有特别的讲究,建议在系统的设计阶段就要求所有编程人员共同

遵守•定的要求,使得整个系统的文档在规范上达到要求。下面是建议的命名方法:

标识符命名规则例子

程序变量V_nameV_name

程序常量C_NameC_company_name

游标变量Name_cursorEmp_cursor

异常标识E_nameE__too_many

表类型Name_table_typeEmp_record_type

表Name_tableEmp

记录类型Name_recordEmp_record

SQL*Plus替代变量P_nameP_sal

绑定变量G_nameG_year_sal

§2.4PL/SQL变量类型

在前面的介绍中,有系统的数据类型,也可以自定义数据类型。下表是ORACLE类型

和PL/SQL中的变量类型的合法使用列表:

§2.4.1变量类型

在ORACLE8i中可以使用的变量类型有:

类型子类说明范围ORACLE限制

CHARCharacter定长字符串09327672000

String可选,确省=1

Rowid

Nchar民族语言字符集

VARCHAR2Varchar,String可变字符串09327674000

NVARCHAR2民族语言字符集4000

BlNARYJNT带符号整数,为整数计算优

EGER化性能

NUMBER(p,sDec小数,NUMBER的子类型

)高精度实数

Double整数,NUMBER的子类型

precision

整数,NUMBER的子类型

Integer

Int与NUMBER等价

Numeric与NUMBER等价

Real整数,比integer小

Smallint

LONG变长字符串0->2147483632,767字节

-7-

_________________________________________________________________________________________8

47

DATE日期型公元前4712年1月

1日至公元后4712

年12月31日

BOOLEAN布尔型TRUE,不使用

FALSE,NULL

ROWID存放数据库行号

UROWID通用行标识符,字符类型

例1.插入一条记录并显示;

DECLARE

Row_idROWID;

infoVARCHAR2(40);

BEGIN

INSERTINTOdeptVALUES(90,,SERVICE;,BEIJING,)

RETURNINGrowid,dname『:'||to_char(deptno)||T||loc

INTOrowjd,info;

DBMS_OUTPUT.PUT_LINE(fROWID:,||row_id);

DBMS_OUTPUT.PUT_LINE(info);

END;

其中:RETURNING子句用于检索INSERT语句中所影响的数据行数,当INSERT语句使

用VALUES子句插入数据时,RETURNING子句还可将列表达式、ROWID和REF值返

回到输出变量中。在使用RETURNING子句是应注意以下几点限制:

1.不能并行DML语句和远程对象一起使用;

2.不能检索LONG类型信息;

3.当通过视图向基表中插入数据时,只能与单基表视图•起使用。

例2.修改•条记录并显示

DECLARE

Row_idROWID;

infoVARCHAR2(40);

BEGIN

UPDATEdeptSETdeptno=80WHEREDNAME=,SERVICE,

RETURNINGrowid,dname||':'||to_char(deptno)||':'||loc

INTOrowjd,info;

DBMS_OUTPUT.PUT_LINE(ROWID:'||「owJd);

DBMS_OUTPUT.PUT_LINE(info);

END;

其中:RETURNING子句用于检索被修改行信息:当UPDATE语句修改单行数据时,

RETURNING子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式,

并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据时,

-8-

9

RETURNING子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量

数组中。在UPDATE中使用RETURNING子句的限制与INSERT语句中对RETURNING

子句的限制相同。

例3.删除一条记录并显示

DECLARE

Row_idROWID;

infoVARCHAR2(40);

BEGIN

DELETEdeptWHEREDNAME='SERVICE,

RETURNINGrowid,dname||':'||to_char(deptno)||':'||loc

INTOrowjd,info;

DBMS_OUTPUT.PUT_LINE(,ROWID:,||row_id);

DBMS_OUTPUT.PUT_LINE(info);

END;

其中:RETURNING子句用于检索被修改行信息:当DELETE语句修改单行数据时,

RETURNING子句可以检索被修改行的ROWID和REF值,以及行中被修改列的列表达式,

并可将他们存储到PL/SQL变量或复合变量中:当DELETE语句修改多行数据时,

RETURNING子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量

数组中。在DELETE中使用RETURNING子句的限制与INSERT语句中对RETURNING

子句的限制相同。

§2.4.2复合类型

ORACLE在PL/SQL中除了提供象前面介绍的各种类型外,还提供一种称为复合类型

的类型一记录和表.

§记录类型

记录类型是把逻辑相关的数据作为一个单元存储起来,它必须包括至少一个标量型或

RECORD数据类型的成员,称作PL/SQLRECORD的域(FIELD),其作用是存放互不相

同但逻辑相关的信息。

定义记录类型语法如下:

TYPErecord_typeISRECORD(

Fieldltypel[NOTNULL][:=exp1],

Field2type2[NOTNULL][:=exp2],

Fieldntypen[NOTNULL][:=expn]);

例4:

DECLARE

-9-

_________________________________________________________________________________________10

TYPEtest_recISRECORD(

CodeVARCHAR2(10),

NameVARCHAR2(30)NOTNULL:='abook5);

V__booktest_rec;

BEGIN

V__book.code=123';

V_:='C++Programming,;

DBMS_OUTPUT.PUT_LINE(v_book.code||v_);

END;

可以用SELECT语句对记录变量进行赋值,只要保证记录字段与查询结果列表中的字

段相配即可。

§使用%TYPE

定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个

列的数据类型相同,这时可以使用%TYPE。

使用%TYPE特性的优点在于:

•所引用的数据库列的数据类型可以不必知道;

•所引用的数据库列的数据类型可以实时改变。

例5:

DECLARE

-用%TYPE类型定义与表相配的字段

TYPEt_RecordISRECORD(

T_noemp.empno%TYPE,

T_nameemp.ename%TYPE,

T_salemp.sal%TYPE);

-声明接收数据的变量

v_empt_Record;

BEGIN

SELECTempno,ename,salINTOv_empFROMempWHEREempno=7788;

DBMS_OUTPUT.PUT_LINE

(TO_CHAR(v_emp.t_no)||v_emp.t_name||TO_CHAR(v_emp.t_sal));

END;

例6:

DECLARE

v_empnoemp.empno%PfPE:=&no;

Typer_recordisrecord(

v_nameemp.ename%PfPE,

v_salemp.sal%TYPE,

v_dateemp.hiredate%TYPE);

Recr_record;

BEGIN

-10-

____________________________________________________________________________________________________11

SELECTename,sal,hiredateINTORecFROMempWHEREempno=v_empno;

DBMS_OUTPUT.PUT_LINE(Rec.v_name|r--'||Rec.v_sal|r-,||Rec.v_date);

END;

§2.4.3使用%ROWTYPE

PL/SQL提供%ROWTYPE操作符,返回一个记录类型,其数据类型和数据库表的数据

结构相一致。

使用%ROWTYPE特性的优点在于:

•所引用的数据库中列的个数和数据类型可以不必知道;

•所引用的数据库中列的个数和数据类型可以实时改变。

例7:

DECLARE

v_empnoemp.empno%TYPE:=&no;

recemp%ROWTYPE;

BEGIN

SELECT*INTOrecFROMempWHEREempno=v_empno;

DBMS_OUTPUT.PUT_LINE('姓名Rrec.ename『工资:Wec.sal(工作时间:Wec.hiredate);

END;

§2.4.4LOB类型*

ORACLE提供了LOB(LargeOBject)类型,用于存储大的数据对象的类型。ORACLE

目前主要支持BFILE,BLOB,CLOB及NCLOB类型。

BFILE(Movie)

存放大的二进制数据对象,这些数据文件不放在数据库里,而是放在操作系统的某个目

录里,数据库的表里只存放文件的目录。

BLOB(Photo)

存储大的二进制数据类型。变量存储大的二进制对象的位置。大二进制对象的大小

<=4GBo

CLOB(Book)

存储大的字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符数据块。

大字符对象的大小<=4GB。

NCLOB

存储大的NCHAR字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符

数据块。大字符对象的大小<=4GB。

§2.4.5BIND变量

绑定变量是在主机环境中定义的变量。在PL/SQL程序中可以使用绑定变量作为他们

将要使用的其它变量。为了在PUSQL环境中声明绑定变量,使用命令VARIABLE。例如:

-11-

_________________________________________________________________________________________12

VARIABLEreturn_codeNUMBER

VARIABLEreturn_msgVARCHAR2(20)

可以通过SQL*Plus命令中的PRINT显示绑定变量的值。例如:

PRINTreturn_code

PRINTreturn__msg

例7:

VARIABLEresultNUMBER

BEGIN

SELECT(sal*12)+nvl(comm,0)INTO:resultFROMempWHEREempno=7788;

END;

PRINTresult

§2.4.6PL/SQL表

PL/SQL表,或者称为索引表(index-table),是可以在PL/SQL程序中弓I用、能够模仿数组

的非永久表。用户可以定义•个表类型,然后声明这种类型的变量。接下来,用户就可以将

记录添加到用户的PL/SQL表中,并且采用与引用数组元素大体相同的方法引用他们.

包括两个基本成分:

.数据处理类型为BINARYJNTEGER主键;

.标量或记录数据类型的列.

TYPEtype_nameISTABLEOF

{column_type|variable%TYPE|table.column%TYPE}[NOTNULL]|table%ROWTYPE

[INDEXBYBINARYJNTEGER];

方法描述

EXISTS(n)ReturnTRUEifthenthelementinaPL/SQLtableexists;

COUNTReturnsthenumberofelementsthataPL/SQLtablecurrentlycontains;

FIRSTReturnthefirstandlast(smallestandlastest)indexnumbersina

LASTPL/SQLtable.ReturnsNULLifthePL/SQLtableisempty.

PRIOR(n)ReturnstheindexnumberthatprecedesindexninaPL/SQLtable;

NEXT(N)ReturnstheindexnumberthatsucceedsindexninaPL/SQLtable;

TRIMTRIMremovesoneelementfromtheendofaPL/SQLtable.

TRIM(n)removesnelementfromtheendofaPL/SQLtable.

DELETEDELETEremovesallelementsfromaPL/SQLtable.

DELETE(n)removesthenthelementsfromaPL/SQLtable.

DELETE(m,n)removesallelementsintherangemtonfromaPL/SQL

table.

例8:

DECLARE

-12-

_________________________________________________________________________________________13

TYPEdept_table_typeISTABLEOF

dept%ROWTYPEINDEXBYBINARYJNTEGER;

my_dname_tabledept_table_type;

v_countnumber(2):=4;

BEGIN

FORintIN1..v_countLOOP

SELECT*INTOmy_dname_table(int)FROMdeptWHEREdeptno=int*10;

ENDLOOP;

FORintINmy_dname_table.FIRST..my_dname_table.LASTLOOP

DBMS_OUTPUT.PUT_LINE(,Departmentnumber:4||my_dname_table(int).deptno);

DBMS_OUTPUT.PUT_LINE('Departmentname:my_dname_table(int).dname);

ENDLOOP;

END;

§2.4.7数据类型的转换*

隐式类型转换

BINJNTCHARDATELONGNUMBERPLSJNTUROWIDVARCHAR2

BINJNT

CHAR

DATE

LONG

NUMBER

RAW

UROWID

VARCHAR2

§2.5运算符和表达式(数据定义)

§2.5.1关系运算符

运算符意义

=等于

<>,!=,~=,A=不等于

<小于

>大于

<=小于或等于

>=大于或等于

§2.5.2一般运算符

运算符意义

+加号

-13-

_________________________________________________________________________________________14

-减号

★乘号

z除号

.二赋值号

=>关系号

范围运算符

II字符连接符

§2.5.3逻辑运算符

运算符意义

ISNULL是空值

BETWEENAND介于两者之间

IN在一列值中间

AND逻辑与

OR逻辑或

NOT取返,如ISNOTNULL,NOTIN

§2.6变量赋值

在PL/SQL编程中,变量赋值是•个值得注意的地方,它的语法如下:

variable:=expression;

variable是一个PUSQL变量,expression是一个PL/SQL表达式.

§2.6.1字符及数字运算特点

空值加数字仍是空值:NULL+<数字〉=NULL

空值加(连接)字符,结果为字符:NULL||v字符串>二v字符串〉

§2.6.2BOOLEAN赋值

布尔值只有TRUE,FALSE及NULL三个值。如:

DECLARE

doneBOOLEAN;

/*thefollowingstatementsarelegal:*/

BEGIN

done:=FALSE;

WHILENOTdoneLOOP

Null;

ENDLOOP;

END;

-14-

________________________________________________________________________________________15

§2.6.3数据库赋值

数据库赋值是通过SELECT语句来完成的,每次执行SELECT语句就赋值一次,一般

要求被赋值的变量与SELECT中的列名要一一对应。如:

例9:

DECLARE

empjdemp.empno%TYPE:=7788;

emp_nameemp.ename%TYPE;

wagesemp.sal%TYPE;

BEGIN

SELECTename,NVL(sal,O)+NVL(comm,0)INTOemp_name,wages

FROMempWHEREempno=empjd;

DBMS_OUTPUT.PUT_LINE(emp_name|r--'||to_char(wages));

END;

提示:不能将SELECT语句中的列赋值给布尔变量。

§2.6.4可转换的类型赋值

•CHAR转换为NUMBER:

使用TO_NUMBER函数来完成字符到数字的转换,如:

vjotal:=TO_NUMBER('100.0')+sal;

•NUMBER转换为CHAR:

使用TO_CHAR函数可以实现数字到字符的转换,如:

v_comm:=TO_CHAR('123.45')'元';

•字符转换为日期:

使用TO_DATE函数可以实现字符到日期的转换,如:

v_date:=TO_DATE('2001.07.03','yyyymm.dd');

•日期转换为字符

使用TOJDHAR函数可以实现日期到字符的转换,如:

v_to_day:=TO_CHAR(SYSDATE,'yyyy.mm.ddhh24:mi:ss');

§2.7变量作用范围及可见性

在PL/SQL编程中,如果在变量的定义上没有做到统•的话,可能会隐藏一些危险的错

误,这样的原因主要是变量的作用范围所致。与其它高级语言类似,PL/SQL的变量作用范

围特点是:

•变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开

始到该块的结束。

-15-

________________________________________________________________________26

•一个变量(标识)只能在你所引用的块内是可见的。

•当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它

可能不用了)。

•在子块中重新定义该变量后,它的作用仅在该块内。

例10:

DECLARE

Emessc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论