LSQL是ORACLE对标准数据库语言的扩展_第1页
LSQL是ORACLE对标准数据库语言的扩展_第2页
LSQL是ORACLE对标准数据库语言的扩展_第3页
LSQL是ORACLE对标准数据库语言的扩展_第4页
LSQL是ORACLE对标准数据库语言的扩展_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE效劳器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL根底语法,结构和组件、以及如何设计并执行一个PL/SQL程序。

PL/SQL的优点

从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形。PL/SQL不是一个独立的产品,他是一个整合到ORACLE效劳器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE效劳器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块。当PL/SQL程序块在PL/SQL引擎处理时,ORACLE效劳器中的SQL语句执行器处理pl/sql程序块中的SQL语句。

PL/SQL的优点如下:

.PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。

.PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型

.PL/SQL块可以被命名和存储在ORACLE效劳器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/效劳器工具都能访问PL/SQL程序,具有很好的可重用性。

.可以使用ORACLE数据工具管理存储在效劳器中的PL/SQL程序的平安性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。

.PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的

.对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle效劳器处理,这就占用大量的效劳器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给效劳器,这就降低了网络拥挤。

PL/SQL块结构

PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL程序包含了一个或多个逻辑块,每个块都可以划分为三个局部。与其他语言相同,变量在使用之前必须声明,PL/SQL提供了独立的专门用于处理异常的局部,下面描述了PL/SQL块的不同局部:

声明局部(Declarationsection)

声明局部包含了变量和常量的数据类型和初始值。这个局部是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽略这一局部;需要说明的是游标的声明也在这一局部。

执行局部(Executablesection)

执行局部是PL/SQL块中的指令局部,由关键字BEGIN开始,所有的可执行语句都放在这一局部,其他的PL/SQL块也可以放在这一局部。

异常处理局部(Exceptionsection)

这一局部是可选的,在这一局部中处理异常或错误,对异常处理的详细讨论我们在后面进行。

PL/SQL块语法[DECLARE]

---declarationstatements

BEGIN

---executablestatements

[EXCEPTION]

---exceptionstatements

END

PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以使多行的,但分号表示该语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。注释由--标示。

PL/SQL块的命名和匿名

PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块。匿名程序块可以用在效劳器端也可以用在客户端。

命名程序块可以出现在其他PL/SQL程序块的声明局部,这方面比拟明显的是子程序,子程序可以在执行局部引用,也可以在异常处理局部引用。

PL/SQL程序块可背独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。ORACLE提供了四种类型的可存储的程序:

.函数

.过程

.包

.触发器

函数

函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创立函数时定义。定义函数的语法如下:FUNCTIONname[{parameter[,parameter,...])]RETURNdatatypesIS

[localdeclarations]

BEGIN

executestatements

[EXCEPTION

exceptionhandlers]

END[name]

过程

存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用,定义存储过程的语法如下:PROCEDUREname[(parameter[,parameter,...])]IS

[localdeclarations]

BEGIN

executestatements

[EXCEPTION

exceptionhandlers]

END[name]

包(package)

包其实就是被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访问速度将大大加快。

包由两个局部组成:标准和包主体(body),标准描述变量、常量、游标、和子程序,包体完全定义子程序和游标。

触发器(trigger)

触发器与一个表或数据库事件联系在一起的,当一个触发器事件发生时,定义在表上的触发器被触发。变量和常量

变量存放在内存中以获得值,能被PL/SQL块引用。你可以把变量想象成一个可储藏东西的容器,容器内的东西是可以改变的。

声明变量

变量一般都在PL/SQL块的声明局部声明,PL/SQL是一种强壮的类型语言,这就是说在引用变量前必须首先声明,要在执行或异常处理局部使用变量,那么变量必须首先在声明局部进行声明。

声明变量的语法如下:Variable_name[CONSTANT]databyte[NOTNULL][:=|DEFAULTexpression]

注意:可以在声明变量的同时给变量强制性的加上NOTNULL约束条件,此时变量在初始化时必须赋值。

给变量赋值

给变量赋值有两种方式:

.直接给变量赋值

X:=200;

Y=Y+(X*20);

.通过SQLSELECTINTO或FETCHINTO给变量赋值

SELECTSUM(SALARY),SUM(SALARY*0.1)

INTOTOTAL_SALARY,TATAL_COMMISSION

FROMEMPLOYEE

WHEREDEPT=10;

常量

常量与变量相似,但常量的值在程序内部不能改变,常量的值在定义时赋予,,他的声明方式与变量相似,但必须包括关键字CONSTANT。常量和变量都可被定义为SQL和用户定义的数据类型。ZERO_VALUECONSTANTNUMBER:=0;

这个语句定了一个名叫ZERO_VALUE、数据类型是NUMBER、值为0的常量。

标量(scalar)数据类型

标量(scalar)数据类型没有内部组件,他们大致可分为以下四类:

.number

.character

.date/time

.boolean

表1显示了数字数据类型;表2显示了字符数据类型;表3显示了日期和布尔数据类型。

表1ScalarTypes:NumericDatatypeRangeSubtypesdescriptionBINARY_INTEGER-214748-2147483647NATURAL

NATURAL

NPOSITIVE

POSITIVEN

SIGNTYPE用于存储单字节整数。

要求存储长度低于NUMBER值。

用于限制范围的子类型(SUBTYPE):

NATURAL:用于非负数

POSITIVE:只用于正数

NATURALN:只用于非负数和非NULL值

POSITIVEN:只用于正数,不能用于NULL值

SIGNTYPE:只有值:-1、0或1.NUMBERDEC

DECIMAL

DOUBLE

PRECISION

FLOAT

INTEGERIC

INT

NUMERIC

REAL

SMALLINT存储数字值,包括整数和浮点数。可以选择精度和刻度方式,语法:

number[〔[,]〕]。

缺省的精度是38,scale是0.PLS_INTEGER-2147483647-2147483647

与BINARY_INTEGER根本相同,但采用机器运算时,PLS_INTEGER提供更好的性能。

表2字符数据类型datatyperangsubtypedescriptionCHAR最大长度32767字节CHARACTER存储定长字符串,如果长度没有确定,缺省是1LONG最大长度2147483647字节

存储可变长度字符串RAW最大长度32767字节

用于存储二进制数据和字节字符串,当在两个数据库之间进行传递时,RAW数据不在字符集之间进行转换。LONGRAW最大长度2147483647

与LONG数据类型相似,同样他也不能在字符集之间进行转换。ROWID18个字节

与数据库ROWID伪列类型相同,能够存储一个行标示符,可以将行标示符看作数据库中每一行的唯一键值。VARCHAR2最大长度32767字节STRINGVARCHAR与VARCHAR数据类型相似,存储可变长度的字符串。声明方法与VARCHAR相同

例汁表3每D抚AT燕E和酒BO脱OL桐EA正NdatatyperangedescriptionBOOLEANTRUE/FALSE存储逻辑值TRUE或FALSE,无参数DATE01/01/4712BC存储固定长的日期和时间值,日期值中包含时间

聪浆LO笑B数谣据类倡型

索消LO善B(合大对陈象,齿La俭rg扒e硬ob变je炎ct从)诱数据岗类型锐用于哈存储态类似略图像寺,声推音这龟样的绑大型尖数据篮对象握,L阁OB级数据洁对象慢可以木是二眼进制致数据迷也可犬以是喝字符秋数据耍,其领最大石长度纽不超夸过饮4G井。L平OB朋数据凭类型搂支持窜任意皇访问春方式蹄,L或ON扰G只佳支持兼顺序肥访问同方式评。L韵OB质存储朗在一衰个单矿独的智位置背上,悲同时该一个拍"L乎OB纳定位酿符"抽(L仓OB范l斗oc酿at播or怀)存狂储在冤原始溪的表零中,行该定闲位符滑是一负个指肥向实播际数软据的新指针赌。在贪PL凶/S考QL瓶中操安作L迅OB潜数据凯对象害使用斤OR娱AC唱LE祥提供偿的包毯DB急MS鸭_L拣OB躁.L闲OB蔬数据继类型察可分俭为以纳下四猴类:

津葛.湖BF草IL砍E

爆帽.篮BL症OB

权络.膏CL版OB

蔑克.连NC槽LO牺B

闸亦操作覆符

循积与其小他程慨序设泼计语奇言相副同,朝PL夫/S壮QL堆有一耻系列统操作司符。阴操作啊符分牺为下浴面几轧类:

傻悦.举算术隶操作疯符

垮猫.刺关系糖操作猛符

辅纠.闯比拟傻操作胁符

烘赞.珍逻劝辑操丝作符

术菌算术席操作亦符如眉表4叮所示operatoroperation+加-减/除*乘**乘方

惰瞧关系府操作布符主律要用割于条涝件判薪断语看句或因用于圆wh均er搏e子牙串中鄙,关辰系操纸作符论检查骂条件品和结诵果是掠否为懒tr舍ue贩或f农al茶se丈,表研5是敲PL泳/S晃QL吩中的席关系劈操作段符operatoroperation<小于操作符<=小于或等于操作符>大于操作符>=大于或等于操作符=等于操作符!=不等于操作符<>不等于操作符:=赋值操作符

书拦表6研显警示的指是比词较操笋作符operatoroperationISNULL如果操作数为NULL返回TRUELIKE比拟字符串值BETWEEN验证值是否在范围之内IN验证操作数在设定的一系列值中

邪气表7颜.8疏显示厦的是演逻辑伏操作公符operatoroperationAND两个条件都必须满足OR只要满足两个条件中的一个NOT取反

呈懒执行佩局部

迅础执行哄局部雄包含导了所渡有的倘语句滑和表相达式商,执纤行部用分以斥关键错字B已EG需IN俱开始轿,以酱关键婆字E坛XC汤EP扭TI摘ON利结束块,如粪果E剥XC惹EP舱TI苍ON恋不存妄在,械那么慈将以湿关键戒字E柏ND望结束策。分恋号分妨隔每凝一条厘语句蜓,使质用赋迫值操呼作符励:=银或S冈EL糕EC跳T血IN古TO他或F孟ET捷CH困I辣NT烧O给帐每个至变量玻赋值妇,执与行部盼分的竖错误旱将在针异常饿处理浴局部捡解决揭,在誓执行序局部应中可烧以使较用另盾一个伏PL思/S蜘QL歌程序双块,姓这种疲程序涂块被自称为轨嵌套生块

裕奶所有环的S档QL神数据根操作但语句辽都可庙以用锡于执济行部慨分,价PL胶/S匆QL注块不弯能再储屏幕李上显杆示S贸EL养EC呼T语串句的材输出遗。S脸EL梳EC纺T语闹句必贤须包上括一甲个I宝NT佛O子惨串或鞠者是灿游标馅的一饺局部独,执价行部刑分使楼用的泪变量崇和常盘量必羞须首隆先在粗声明仁局部山声明爷,执均行部追分必让须至榆少包层括一雷条可状执行市语句喜,N条U弯LL渔是一翠条合陡法的愁可执系行语搬句,岁事物怒控制装语句炎CO巷MM弓IT狸和R块OL诵LB主AC北K可善以在殃执行校局部榴使用冬,数聪据定狸义语尿言(宣Da钱ta夸D窜ef怠in酷it稿io冲n惊la失ng瞎ua筐ge蛙)不冒能在报执行幸局部踢中使写用,刑DD瑞L语幅句与烘EX省EC贯UT累E滑IM乡ME馆DI巷AT返E一湿起使满用或岭者是授DB惧MS申_S胃QL狠调用遮。

阀局执行焦一个应PL梦/S避QL剩块

摧缓SQ阶L*内PL问US豪中匿絮名的爆PL擦/S宋QL掘块的租执行贤是在矩PL赴/S你QL颤块后牙输入森/来演执行躬,如崇下面拘的例刷子所帖示:declare

v_comm_percentconstantnumber:=10;

begin

updateemp

setcomm=sal*v_comm_percent

wheredeptno=10;

end

SQL>/

PL/SQLproceduresuccessfullycompleted.

SQL>

艰四命名晌的程子序与堡匿名沟程序愧的执当行不愿同,毁执行用命名紫的程来序块催必须考使用朱ex烂ec顽ut精e关泻键字宿:createorreplaceprocedureupdate_commission

(v_deptinnumber,v_perventinnumberdefault10)is

begin

updateemp

setcomm=sal*v_percent

wheredeptno=v_dept;

end

SQL>/

Procedurecreated

SQL>executeupdate_commission(10,15);

PL/SQLproceduresuccessfullycompleted.

SQL>

修表如果融在另漏一个肯命名某程序擦块或违匿名窝程序涝块中替执行渡这个蹦程序狼,那垮么就耍不需区要E蹲XE凤CU嫩TE会关进怎字。declare

v_deptnumber;

begin

selecta.deptno

intov_dept

fromempa

wherejob='PRESIDENT'

update_commission(v_dept);

end

SQL>/

PL/SQLproceduresuccessfullycompleted

SQL>坦控制观结构

侵翻控制皮结构边控制宾PL袜/S物QL陆程序脂流程际的代妥码行考,P何L/蛙SQ钳L支挥持条浸件控地制和染循环弯控制警结构时。

你税语法意和用握途

亦握I州F.樱.T凤HE蔑N

减盖语法扇:IFconditionTHEN

Statements1;

Statements2;

....

ENDIF

撤改IF荒语句使判断许条件芬co细nd蛇it假io座n是兰否为围TR景UE隔,如骗果是贯,那么纺执行窄TH船EN始后面岗的语阶句,藏如果惜co访nd尘it吸io柄n为异fa雅ls盖e或含NU副LL葵那么跳奴过T贸HE法N到锤EN拆D情IF益之间牺的语咽句,感执行腰EN碌D表IF筒后面筝的语腐句。

臂颜IF恭..割TH雾EN予..筛.E勤LS告E

饶赞语法且:IFconditionTHEN

Statements1;

Statements2;

....

ELSE

Statements1;

Statements2;

....

ENDIF

哗幅如果洒条件观co扯nd叔it持io屠n为稿TR盐UE徒,那么产执行怎TH救EN奶到E贯LS怖E之泛间的自语句听,否推那么执诉行E循LS横E到需EN扎D钟IF甘之间半的语行句。

荒壁IF役可容以嵌劈套,振可以宽在I木F扮或I昂F忘..罪EL贞SE娱语句各中使袖用I固F或族IF妇..芹EL驳SE贞语句失。if(a>b)and(a>c)then

g:=a;

else

g:=b;

ifc>gthen

g:=c;

endif

endif

搏志IF淘..茅TH吩EN协..扩EL当SI基F

宁排语法疼:IFcondition1THEN

statement1;

ELSIFcondition2THEN

statement2;

ELSIFcondition3THEN

statement3;

ELSE

statement4;

ENDIF;

statement5;

杰绘如果柱条件庸co添nd宏it紫io寒n1洒为T变RU穷E那么尝执行草st防at咐em薪en习t1诞,然壮后执镰行s笔ta絮te帖me刷nt常5,厉否那么腰判断盟co及nd更it泥io观n2拾是否渴为T请RU您E,誉假设为胜TR病UE好那么执买行s宣ta品te吊me前nt云2,巩然后块执行幅st您at错em挽en踩t5判,对的于c士on序di罗ti助on舍3也选是相爆同的舍,如么果c宣on惩di竿t哲io居n1华,c萄on源di爆ti百on冻2,覆co编nd旅it逼io趣n3荡都不爸成立雹,那备么将邮执行樱st天at慢em泡en叹t4键,然毙后执泪行s饿ta茎te品me测nt假设5。

雅玩循环劈控制

热贿循环弱控制奶的基芝本形首式是辨LO块OP棕语句丘,L伙OO嘱P和涛EN之D然LO畏OP聚之间卖的语苗句将而无限牵次的刚执行友。L湾OO黑P语太句的阀语法加如下皇:

葛滴LO锈OP渔

柴皆s进ta态te努me辱nt间s;

乒法EN骄D台LO做OP

闸贯LO乒OP挖和E燃ND纷L邻OO党P之队间的盏语句反无限答次的刃执行话显然袋是不稍行的达,那胳么在垄使用纪LO锣OP忠语句叫时必肌须使删用E相XI报T语秤句,鲜强制访循环瓦结束异,例谦如:X:=100;

LOOP

X:=X+10;

IFX>1000THEN

EXIT;

ENDIF

ENDLOOP;

Y:=X;

子碧此时融Y的采值是耐10呼10敲.

卸抢EX扎IT抚W稳HE逢N语棍句将汁结束拖循环匀,如茎果条魄件为蛇TR拳UE后,那么谎结束割循环宪。X:=100;

LOOP

X:=X+10;

EXITWHENX>1000;

X:=X+10;

ENDLOOP;

Y:=X;

偏康WH粥IL津E.嫩.L屿OO属P

碑优WH鄙IL好E.迷.L呀OO养P有余一个恶条件蔽与循源环相缺联系守,如回果条闸件为赖TR组UE位,那么版执行财循环肃体内朱的语右句,勉如果喂结果艘为F遵AL取SE党,那么号结束肌循环常。X:=100;

WHILEX<=1000LOOP

X:=X+10;

ENDLOOP;

Y=X;

对膝FO恩R.心..摸LO执OP

懒轨语法肾:FORcounterIN[REVERSE]start_range....end_rangeLOOP

statements;

ENDLOOP;

密老LO快OP旷和W到HI后LE绸循环脚的循歼环次挑数都宏是不岩确定茶的,吴FO商R循岭环的取循环莫次数破是固吨定的调,c镜ou尽nt太er朝是一谈个隐木式声阿明的省变量奔,他凳的初掠始值蒙是s厅ta插rt滴_r贴an命ge辅,第脑二个蔑值是炒st欧ar这t_轨ra兽ng扫e+斤1,冲直到角en免d_勤ra过ng绒e,请如果养s劝ta联rt拿_r丹an喊ge球等于过en桃d欲_r线an头ge挽,那汽么循摔环将准执行晌一次型。如假果使链用了英RE俘VE私RS赔E关泪键字您,那释么范懒围将鸭是一膜个降冤序。X:=100;

FORv_counterin1..10loop

x:=x+10;

endloop

y:=x;

络单如果袜要退吃出f说or屯循环抖可以厉使用竟EX染IT拐语句墓。

觉淹标签

穴侮用户京可以促使用哲标签首使程戏序获托得更凤好的吉可读升性。谅程序廊块或和循环叼都可出以被稼标记胡。标刃签的睬形式喉是<管>。

聚拾标记票程序座块<>

[DECLARE]

.........

BEGIN

........

[EXCEPTION]

.......

ENDlabel_name

嚼声标记赖循环<>

LOOP

.........

<>

loop

..........

<>

loop

....

EXITouter_loopWHENv_condition=0;

endloopinnermost_loop;

..........

ENDLOOPinner_loop;

ENDLOOPouter_loop;

俊荷GO呜TO犯语句

斩懂语法壤:

那么栽GO雨TO仔L减AB挖EL惊;

两划执行址GO外TO壶语句陆时,松控制骄会立烛即转药到由腾标签考标记堂的语吃句。广PL凭/S陕QL而中对优GO苗TO巴语句舒有一学些限风制,奸对于双块、劫循环弊、I杀F语设句而芳言,共从外乎层跳蹦转到零内层忠是非次法的闸。X:=100;

FORV_COUNTERIN1..10LOOP

IFV_COUNTER=4THEN

GOTOend_of_loop

ENDIF

X:=X+10;

<>

NULL

ENDLOOP

Y:=X;

浇叛注意吵:N归UL灾L是属一个灶合法船的可貌执行泻语句粥。

可哈嵌套

陕衡程序喜块的教内部落可以昼有另映一个捕程序城块这防种情贺况称载为嵌贱套。蠢嵌套腹要注御意的疾是变烤量,导定义颤在最赠外部你程序邮块中峡的变右量可盏以在稿所有跑子块担中使顺用,星如果威在子饺块中辉定义注了与圾外部犁程序励块变赔量相心同的甘变量纤名,晴在执搁行子麻块时那么将使蒙用子销块中史定义币的变降量。愁子块劲中定校义的饭变量渡不能市被父炭块引蜡用。株同样钻GO窃TO搂语句更不能薄由父忧块跳偏转道妻子块铸中,蹄反之想那么是击合法洞的。?OUTERBLOCK?

DECLARE

A_NUMBERINTEGER;

B_NUMBERINTEGER;

BEGIN

--A_NUMBERandB_NUMBERareavailablehere

<>

DECLARE

C_NUMBERINTEGER

B_NUMBERNUMBER(20)

BEGIN

C_NUMBER:=A_NUMBER;

C_NUMBER=OUTER_BLOCK.B_NUMBER;

ENDSUB_BLOCK;

ENDOUT_BLOCK;

拳执小结

惰汉我们泊在这遇篇文规章中循介绍养了P惰L/忌SQ伙L的偏根底蜘语法泻以及因如何哭使用柴PL荣/S边QL秀语言航设计喇和运微行P歌L/狱SQ回L程章序块梅,并秃将P洗L/黄SQ叙L程绍序整稻合到餐Or睛ac百le察效劳共器中色,虽弓然P渔L/跳SQ叫L程徒序作基为功闸能块或嵌入缠Or陶ac驱le牲数据农库中先,但贿PL匆/S患QL否与O到RA蝇CL秒E数滋据库岔的紧犁密结肥合使厦得越泥来越势多的惭Or心ac系le谨数据慧库管忍理员泥和开材发人痰员开晒始使伟用P献L/龙SQ严L。

庄全面听探讨唤PL找/S诚QL握的复喝合数控据类偶型谣PL桥/S施QL灶有两够种复剂合数堡据结查构:肝记录副和集雀合。袖记录谋由不今同的别域组汇成,道集合朽由不葛同的奴元素尸组成今。在逮本文恳中我角们将奖讨论眨记录横和集吗合的朱类型直、怎谊样定移义和政使用炉记录当和集易合。

誉炕PL造/S蓄QL权记爬录

拴挥记录关是P择L/皮SQ尸L的跌一种望复合三数据庸结构馅,s屯ca吵la象r数罩据类兴型和在其他千数据绣类型根只是烧简单贞的在回包一骗级进由行预件定义余,但粱复合载数据朴类型怨在使谣用前凶必须启被定哪义,陡记录威之所烧以被品称为翁复合盗数据幅类型冒是因循为他珠由域养这种艳由数泥据元伯素的显逻辑浊组所圾组成眯。域色可以陶是s鼻ca霸la瓶r数邀据类轿型或部其他派记录室类型映,它架与c诉语言架中的等结构轨相似至,记窄录也读可以压看成爸表中绵的数拥据行古,域帆那么相段当于允表中谎的列璃,在毒表和民虚拟恩表〔世视图此或查哭询〕礼中非躬常容菜易定巩义和玩使用租,行凡或记促录中扬的每客一列燕或域劝都可格以被坦引用拖或单副独赋桥值,夺也可设以通强过一董个单辜独的陡语句菌引用堤记录宏所有弄的域涂。在止存储袍过程习或函迷数中典记录此也可厌能有栏参数愧。

足蜓创立垃记录

苍宣在P汇L/俯SQ窜L中近有两虎种定箱义方耗式:省显式葛定义臭和隐毙式定俭义。淹一旦来记录由被定烂义后季,声创造或漆创立歼定义仁类型芦的记血录变税量,招然后熔才是序使用愁该变合量。帖隐式蛋声明雁是在态基于施表的丰结构恋或查坊询上划使用泄%T早YP酱E属布性,数隐式并声明述是一掠个更归强有怖力的奔工具口,这缺是因绑为这皮种数损据变刊量是扩动态我创立幻的。

沫隆显式写定义相记录

冠陷显式销定义竭记录州是在释PL消/S姑QL浑程序辨块中陶创立乌记录等变量汁之前尚在声询明部歇分定馆义。检使用股ty雨pe铲命令见定义耗记录斜,然洁后在奇创立陵该记劝录的隆变量刑。语目法如异下:啦TYPErecord_typeISRECORD(field_definition_list);

氏控fi昂el腾d_钉de厉fi饮ni湖ti婆on边_l直is据t是惹由逗摧号分税隔的凉列表示。

烛桃域定被义的未语法子如下辱:field_namedata_type_and_size[NOTNULL][{:=|DEFAULT}default_value]

兴故域名呀必须咸服从银与表句或列承的命羽名规朵那么相吗同的穗命名厦规那么轧。下有面我菌们看矮一个衰例子遵:DELCARE

TYPEstock_quote_recISRECORD

(symbolstock.symbol%TYPE

,bidNUMBER(10,4)

,askNUMBER(10,4)

,volumeNUMBERNOTNULL:=0

,exchangeVARCHAR2(6)DEFAULT'NASDAQ'

);

real_time_quotestock_quote_rec;

variable

蹲螺域定扭义时榨的%称TY饮PE纱属性运用于苹引用诚数据穿库中血的表汇或视财图的赛数据煤类型钞和大狐小,相而在屋此之推前程芹序不棍知道昏类型愁和大裂小。天在上骆面的枯例子帜中记关录域拜在编泽译时鱼将被检定义扑为与旅列S菠YM至BO协L相混淆的厚数据装类型发和大挣小,陈当代弃码中肤要使俊用来音自数全据库怪中的见数据婆时,吃在变黄量或斗域定碗义中造最好谎使用河%T为YP陵E来伍定义浇。

赢战隐式肺定义疾记录

拾话隐式浴定义销记录科中,诊我们道不用歌描述愉记录每的每段一个语域。驾这是债因为权我们帝不需笛要定思义记错录的欺结构茅,不狡需要玉使用顷TY趟PE舱语句币,相启反在渐声明震记录匙变量蛙时使馋用%筒RO动WT涛YP著E命协令定将义与颂数据蝇库表扎,视班图,疑游标蝴有相辆同结比构的匆记录毅,与滩TY贱PE菊命令妥相同扰的是荡它是耗一种节定义码获得熄数据勺库数舞据记谎录的嫩好方炉法。DECLARE

accounter_infoaccounts%ROWTYPR;

CURSORxactions_cur(acct_noINVARCHAR2)IS

SELECTaction,timestamp,holding

FROMportfolios

WHEREaccount_nbr='acct_no'

;

xaction_infoxactions_cur%ROWTYPE;

variable

喇行有一糊些P争L/深SQ财L指吨令在比使用塔隐式撑定义邮记录沙时没赵有使场用%淘RO寿WT惭YP陷E属尽性,葱比方眠游标假设FO计R循话环或适触发罗器中察的击:o赔ld苏和:祝ne杯w记随录。DELCARE

CURSORxaction_curIS

SELECTaction,timeamp,holding

FROMportfolios

WHEREaccount_nbr='37'

;

BEGIN

FORxaction_recinxactions_cur

LOOP

IFxactions_rec.holding='ORCL'

THEN

notify_shareholder;

ENDIF;

ENDLOOP;举使用悄记录

堵奸用户扩可以甘给记贝录赋忍值、口将值连传递辣给其耳他程想序。形记录径作为状一种筛复合源数据秤结构腿意味茫作他摆有两盲个层掠次可党用。妈用户迅可以上引用省整个诵记录工,使是用s棵el迈ec核t晶in三to鹿或f耗et汤ch饮转移愧所有在域,挽也可购以将院整个桌记录证传递评给一岛个程纹序或义将所嘉有域桶的值纵赋给耳另一南个记描录。端在更职低的秀层次纷,用吓户可划以处傅理记层录内理单独栏的域鬼,用娱户可孩以给耳单独摘的域阀赋值栗或者绸在单糕独的搏域上制运行洗布尔愈表达茧式,规也可笑以将据一个傍或更煮多的砌域传晓递给失另一削个程孩序。

献界引用崖记录

概晕记录召由域艰组成凑,访四问记钞录中渔的域敌使用腰点〔露.〕湖符号堆。我任们使墙用上址面的算例子杏看看DELCARE

TYPEstock_quote_recISRECORD

(symbolstock.symbol%TYPE

,bidNUMBER(10,4)

,askNUMBER(10,4)

,volumeNUMBERNOTNULL:=0

,exchangeVARCHAR2(6)DEFAULT'NASDAQ'

);

TYPEdetailed_quote_recISRECORD

(quotestock_quote_rec

,timestampdate

,bid_sizeNUMBER

,ask.sizeNUMBER

,last_tickVARCHAR2(4)

);

real_time_detaildetail_quote_rec;

BEGIN

real_time_detail.bid_size:=1000;

real_time_detail.quote.volume:=156700;

log_quote(real_time_detail.quote);

笑因给记夸录赋裁值

渣善给记症录或龟记录鸽中的服域赋网值的修方法公有几扣种,倚可以逢使用拣SE时LE策CT聋I间NT骨O或鹅FE岔TC拉H给员整个龄记录惹或单炒独的炉域赋汁值,僻可毒以将陪整个怒记录担的值醒赋给担其他离记录坊,也听可以溜通过告给每痰个域份赋值呈来得踪到记亩录,柿以下种我们酒通过裳实例象讲解书每一告种赋肌值方轻法。

议仪1、显使用丹SE催LE旬CT磨I冶NT环O

粘万使用放SE占LE场CT劈I伙NT宫O给绳记录津赋值悟要将状记录征或域定放在衔IN裳TO读子串捡中,受IN肺TO况子串庆中的理变量题与S庙EL鸟EC沉T中赔列的绸位置丸相对持应。

境创例:DECLARE

stock_info1stocks%ROWTYPE;

stock_info2stocks%ROWTYPE;

BEGIN

SELECTsymbol,exchange

INTOstock_info1.symbol,stock_info1.exchange

FROMstocks

WHEREsymbol='ORCL';

SELECT*INTOstock_info2FROMstocks

WHEREsymbol='ORCL';

掏醉2、充使用挖FE暑TC援H

奏建如果生SQ海L语踢句返附回多伯行数晋据或枕者希犁望使旗用带宫参数术的游承标,氏那么平就要匙使用龄游标宾,这而种情险况下宗使用仇FE划TC西H语理句代移替I程NS漏TE拿AD经I辅NT卧O是三一个废更简泊单、昼更有倚效率超的方史法,腿但在榜平安略性较沾高的捷包中们FE男TC集H的斑语法舰如下莫:FETCHcursor_nameINTOvariable;

贩突我们镇改写匪上面兰的例醉子:DECLARE

CURSORstock_cur(symbol_inVARCHAR2)IS

SELECTsymbol,exchange,begin_date

FROMstock

WHEREsymbol=UPPER(symbol_in);

stock_infostock_cur%ROWTYPE

BEGIN

OPENstock_cur('ORCL');

FETCHstock_curINTOstock_info;

率孔使用矮赋值追语句折将整凶个记到录复饰制给真另一俊个记顶录是印一项周非常惧有用勒的技走术,或不过朝记录辩必须倍精确凤地被虹声明船为相泻同的费类型典,不泛能是您基于款两个跑不同膜的T融YP固E语昨句来蔽获得塑相同肃的结随构。

岭穷例:DECLARE

TYPEstock_quote_recISRECORD

(symbolstocks.symbol%TYPE

,bidNUMBER(10,4)

,asknumber(10,4)

,volumeNUMBER

);

TYPEstock_quote_tooISRECORD

(symbolstocks.symbol%TYPE

,bidNUMBER(10,4)

,asknumber(10,4)

,volumeNUMBER

);

--这两个记录看上去是一样的,但实际上是不一样的

stock_onestocks_quote_rec;

stock_twostocks_quote_rec;

--这两个域有相同的数据类型和大小

stock_alsostock_rec_too;--与stock_quote_rec是不同的数据类型

BEGIN

stock_one.symbol:='orcl';

stock_one.volume:=1234500;

stock_two:=stock_one;--正确

syock_also:=stock_one;--错误,数据类型错误

stock_also.symbol:=stock_one.symbol;

stock_also.volume:=stock_one.volume;

草胜记录耳不能生用于孟IN达SE壶RT牧语句抹和将忽记录绣直接遭用于拦比拟愉,下窄面两烟种情裂况是芦错误鬼的:

科睡土IN凡SE螺RT寨I该NT瑞O昂st虹oc厘ks述V跪AL害UE死S壳(s班to疫ck晚_r婶ec聚or血d)筐;

缓僵和

盆逃I替F竖st台oc趁k_开re振c1专>s目to凝ck陪_r布ec粉2晴TH灯EN

匀清要特产别注行意考具试中州试题弦中有们可能纳用%董RO房WT程YP跑E来叛欺骗都你,魂但这预是错兄误的饿,记廊住这圆一点滚。还饥有可悄能会脂出现菠用记书录排央序的苍情况浊,O奔RA熔CL度E不绑支持垮记录率之间朗的直送接比公较。此对于旱记录季比拟使,可赤以采陕用下浙面的位两个叨选择自:

麦弄.衬设计档一个纺函数淹,该怎函数哗返回谦sc菊al单ar招数据袜类型威,使捷用这瓣个函裙数比研较记双录,秤如IFsort_rec(stock_one)>sort_rec(stock_two)THEN意鸽.嫌可以姐使用竖数据持库对伍象,些数据糕库对均象可誉以使鸣用o杆rd魔er果或m龙ap巨方法眉定义追,允献许o填ra颤cl梨e对朝复合司数据虫类型撑进行防比拟剪。关税于数贪据库慎对象输的讨榜论已烂经超泽越了剥本文慢的范疏围,飘要详疫细了素解数奇据库俱对象蛋,可沉以查绑阅o杆ra同cl该e手窗册。离PL抛/S承QL件集合

股避集合合与其争他语碰言中文的数套组相寨似,摸在O珠RA坛CL或E7缎.3沫及以列前的期版本笼中只红有一梳种集伤合称画为P掀L/趋SQ弓L表仙,这俘种类喝型的瑞集合浙依然脱保存饥,就弃是索驼引〔丰IN材DE撤X_纹BY钟〕表稠,与览记录粥相似段,集阴合在春定义培的时俗候必帝须使语用T怨YP寻E语捐句,粒然后泉才是鹊创立产和使候用这裹种类品型的宰变量惨。

施持集合珍的类匀型

干塑PL寒/S委QL鞋有三递种类懂型的怀集合

慧阶.马In姿de阻x_爽by竿表

窑别.拘嵌套忧表

生葡.立VA齐RR条AY

狐妄这三紧种类序型的惹集合善之间课由许感多差卫异,追包括匠数据妄绑定财、稀搅疏性碌(s帽pa辛rs虏it裕y)描、数压据库捏中的喉存储烂能力骑都不垮相同获。绑字定涉阻及到荡集合姥中元夺素数且量的乎限制吐,V集AR荡RA吹Y集剖合中厦的元蜂素的刚数量斥是有写限,芦In每de访x_渣by急和嵌轿套表宣那么是直没有辰限制兵的。知稀疏济性描霸述了凤集合洒的下话标是债否有神间隔也,I永nd氧ex凯_b持y表挖总是钳稀疏命的,郊如果番元素掏被删叶除了漫嵌套侮表可训以是喘稀疏恶的,良但V墓AR收RA章Y类者型的绞集合伪那么是俗紧密度的,觉它的惯下标奸之间缘没有右间隔坡。

碗堡In递de好x_缠by稍表不费能存文储在牙数据听库中榴,但头嵌套俩表和族VA欺RR嫁AY沟可以防被存粱储在罢数据淡库中炭。

帜祥虽然纵这三庭种类争型的糠集合俗有很病多不狸同之玩处,算但他妄们也焦由很犁多相沾似的庙地方于:

哪满.圆都排是一务维的赢类似愚数组排的结娘构

胆什.鱼都尊有内血建的霸方法

脉掠.洒访心问由柴点分碧隔

补甚In悄de银x_到by群表

邀齐In怖de闷x_撤by验表集匹合的扒定义唉语法利如下伞:TYPEtype_nameISTABLEOFelement_type[NOTNULL]INDEX

BYBINARY_INTERGET;杀羞这里京面重溉要的拨关键鬼字是世IN激DE镇X锐BY扛B门IN笨AR珍Y_项I袍NT丙ER闸GE滤T,柳没有拨这个法关键讲字,鹿那么敌集合址将是狱一个拼嵌套览表,叔el稳em浑en病t_洁ty仿pe厕可以后是任杯何合陈法的滚PL纠/S诉QL撤数据镜类型扮,包矮括:鲁PL科S/肥IN蹲TE炕GE港R、慰SI宁GN吸TY茂PE辫、和骄BO危OL狼EA炕N。江其他库的集叠合类棉型对杰数据慈库的恨数据疑类型就都有宴限制星,但村In输de统x_胃by章表不次能存社储在棍数据疏库中暮,所皱以没情有这估些限唯制。

照染一旦术定义乎了i肌nd就ex稍_b洲y表煮,就描可以搂向创教建其乔他变蚀量那课样创恳建i注nd井ex淋_b窄y表突的变强量:DECLARE

TYPEsymbol_tab_typISTABLEOFVARCHAR2(5)INDEXBYBINARY_INTEGER;

symbol_tabsymbol_tab_typ;

BEGIN啄堆嵌套绞表

导注嵌套汁表非冠常类渗似于践In哑de利x_招by占表,李创立岭的语堤法也惯非常骗相似累。使拣用T促YP卷E语默句,位只是绢没有六IN挑DE娇X钱BY峰B饮IN循AR热Y_摄IN幼TE槐GE曾R子极串。

糖蹈TY品PE礼t寄yp丢e_顾na彻me失I日S窝TA亡BL蚁E烛OF竭e绒le姨me猾nt祝_t京yp驾e鱼[N们OT扎N摇UL费L]

翁编NO套T血NU妥LL约选项棋要求杆集合俭所有畜的元遣素都方要有芹值,施el涌em写en挺t_济ty莲pe砖可以伟是一塞个记剥录,企但是卫这个肢记录去只能秩使用砍标量品数据狸类型典字段任以及辩只用预于数吼据库使的数洁据类载型〔建不能昨是P衰LS娃_I圆NT够EG捎ER技,B透OO乞LE酱AN龄或S得IG采NT卫YP洪E〕妙。

市艘嵌套检表和惰VA途RR兵AY碍都能方作为听列存钱储在舰数据持库表死中,袜所以三集合玩自身兵而不篇是单蚂个的探元素违可以援为N而UL铜L,声OR梦AC睛LE假设称这活种整锡个集膝合为棕NU话LL筒的为榨"自例动设属置为痛NU乳LL暴(a拆to绵mi质ca槐ll判y帮NU纲LL罪)"块以区沫别元唤素为转NU喉LL蔬的情动况。习当集枪合为觉NU袖LL勺时,找即使兴不会傲产生爱异常览,用缠户也照不能挖引用袄集合块中的悠元素蒸。用纷户可弃以使症用I抬S雅NU尝LL财操作腰符检眯测集兄合是疮否为叔NU胞LL贯。

梦评存储低在一砖个数柴据库耕中的著嵌套梦表并医不与靠表中白的其兆它数林据存浓放在招同一之个数德据块添中,祸它们辽实际椅上被贷存放园在第金二个骂表中辣。正头如没味有o眯rd巷er吸b叠y子晶句s铸el挤ec羽t语歪句不狭能保颜证返哑回任醒何有丛顺序敬的数键据,唯从数犹据库泄中取明回的呀嵌套泻表也染不保祥证元体素的附顺序连。由至于集俩合数斜据是颠离线耕存储牛的,宰对于雁大型已集合裕嵌套喉表是政一个粒不错韵的选捉择。

弦俗VA泳RR门AY

房无VA病RR剪AY穴或数故据变保量都贞有元飞素的秋限制殃。想翼起他患集合辰一样袄VA刺RR斯AY毁定义勺仍然迫使用钟TY兔PE纠语句房,但徐关键筝字V脚AR塞RA侮Y或身VA誉RR士YI悔NG潮A突RR棚AY咱告诉狂OR特AC激LE察这是美一个方VA辟RR终AY轻集合倚。TYPEtype_nameIS[VARRAY|VARYINGARRAY](max_size)OF

element_type[NOTNULL]抽暗ma胆x_茅si肢ze勺是一脑个整楚数,灾用于舰标示宰VA迁RR鞠AY聚集合割拥有夹的最斧多元桑素数忧目。妻VA放RR润AY粒集合使的元左素数鱼量可素以低犯于m妻ax嗓_s田iz谣e,倡但不筹能超辈过m惭ax高_s护iz蜜e。森el葬em组en枕t_五ty毫pe料是一羡维元距素的击数据缝类型坑,如讽果e框le骑me蜓nt出_t徐yp劣e是贺记录拨,那辉么这泡个记良录只逢能使涛用标庙量数喉据字筒段〔稀与嵌谨套标分相似唤〕。输NO睬T议NU如LL趁子串贩表示弯集合脆中的悠每一固个元逃素都唐必须狡有值痒。

连录与嵌袭套表哭相似涂,V排AR然RA稀Y能流够自毁动为胶NU讨LL狐,可吵以使饭用I说S扑NU捏LL垦操作减符进箩行检释测。并与嵌俘套表犁不同床的是猴,当斧VA迈RR挥AY补存储锹在数率据库仇中时畜与表业中的帖其他蛾数据趴存放顿在同柜一个喇数据梢块中究。正盛象列哗的排旅序保事存在及表的鹊SE锄LE喘CT泰*中吩一样期元素稠的顺俭序保书存在骂VA再RR亩AY份中。铃同样叔由于刘集合茂是在速线存中储的翅,V沙AR河RA暖Y很侄适合皮于小懒型集虚合。或使用责集合

埋昌象记弊录一稠样,矮集合称可以渣在两棍个层恳面上疗使用足:

馒嗓.熟操恰作整副个集冤合

麻仍.猪访坡问集行合中步的单躁个元环素

貌塔第一搬种情汽况使记用集厘合名惜,第军二种太情况项使用父下标患:

归胁c束ol铜le乎ct侍io筝n(渡su亡bs创cr处ip喇t)

叠霞in教de哀x_洪by卖表的夕下标券是两脑为的僵整数角,可编以为祖正也蛾可以仍为负甩,范号围是缩:-风21未47柜48圆36流47衬--结21伯47谊48亦36站47翁。嵌亩套表戏和V债AR郑RA血Y表肉示元柔素在道集合夸中的业位置待,用舍户很现难灵痕活设锅计下量标,融这是绿因为既:

查砌.完嵌例套表移开始阶是紧厉密的夹〔相助对于转疏松袍〕

该将.植V播AR救RA叶Y始羞终保庭持紧站密

套险.祖这束两种居集合葱的下洗标都验由1掌开始

宴嫁初始僚化、仙删除械、引弦用集捡合

器弃使用佣集合愿之前锁必须渐要初民始化迫,对委于I俗nd闷ex慕_b攀y表逆初始背化是堂自动滔进行塌的,里但是锦对于升嵌套役表和浴VA赞RR丝AY蜂就必锯须使旺用内悉建的牛构造愿函数蛙。如救果重蜜新调报用,诵嵌套转表和诞VA段RR滋AY贯自动格置N皇UL占L,逮这不涉只是勇元素桑置N弓UL逢L,膝而是久整个秋集合托置N亭UL好L。粪给集缺合内丧的元忌素赋晋值需祖要使箭用下睡标符热号。仁将一顽个集陡合的纪值赋咳给另杯一个感集合概,只旋需要大简单架的使残用赋炭值操核作符柏。

充砍In滥de探x_璃by贷集合寒初始皂化是香最简练单的互,只推要涉灿及其鸣中的都一个持元素贞集合糊就被给初始雨化了司。

望贞例:暮DECLARE

TYPEsymbol_tab_typISTABLEOFVARCHAR2(5)INDEXBYBINARY_INTEGER;

TYPEaccount_tab_typISTABLEOFaccount%ROWTYPEINDEXBYBINARY_INTEGER;

symbol_tabsymbol_tab_typ;

account_tabaccount_tab_typ;

new_acct_tabaccount_tab_typ;

BEGIN

--初始化集合元素147和-3

SELECT*INTOaccount_tab(147)

FROMaccountsWHEREaccount_nbr=147;

SELECT*INTOaccount_tab(-3)

FROMaccountsWHEREaccount_nbr=3003;

IFaccount_tab(147).balance<500THEN

chang_maintenance_fee(147);

ENDIF

new_acct_tab:=account_tab;

symbol_tab(1):="ORCL";

symbol_tab(2):="CSCO";

symbol_tab(3):="SUNM";

publish_portfolio(symbol_tab);狱愉嵌套嫁表和端VA值RR吐AY榨由构逐造函谋数初造始化菌,构绳造函含数和收集合交的名酷字相刑同,挂同时毛有一彻组参目数,全每个冬参数缘对应缠一个映元素芬,如肃果参缘数为刃NU牵LL晨,那沿么对材应的准元素桨就被紧初始北化为辉NU狡LL饭,如昏果创丸建了顾元素辞,但卡没有艰填充介数据网,那夫么元鬼素将挂保持羊nu鬼ll作值,吸可以哄被引剑用,丸但不泻能保浪持数农据。懒如果搭元素约没有逝初始愧化,戚那么时就不苗能引赛用该倍元素跪。

抖趋例:DECLARE

TYPEstock_listISTABLEOFstock.symbol%TYPE;

TYPEtop10_listISVARRAY(10)OFstocks.symbol%TYPE;

biotech_stocksstock_list;

tech_10top10_list;

BEGIN

--非法,集合未初始化。

biotech_stocks(1):='AMGN';

IFbiotech_stocksISNULLTHEN

--初始化集合

biotech_stocks:=('AMGN','BGEN',IMCL','GERN',CRA');

ENDIF;

tech_10:=top10_list('ORCL',CSCO','MSFT','INTC','SUNW','IBM',NULL,NULL);

IFtech_10(7)ISNULLTHEN

tech_10(7):='CPQ';

END

tech_10(8):='DELL';匀烟在这巴个例巾子中膏,嵌顶套表傻BI蔽OT惰EC估H_宅ST求OC们KS寻初始犯化有廊5个芽元素蔽,V抛AR纠RA殃Y按te末ch厉_1受0集苍合最衡多能位有1剧0嫁个元闲素,碧但构圣造函悟数只较创立奉了8径个元挪素,深其中高还有牵两个垒元素朵是N凤UL流L值作,并翠程序醒中给蒜他们田赋值律。

每身初始携化基广于记粉录的僵集合持,就药必须理将记踪录传旺递给哄构造个函数纲,注属意不复能只止是简全单的暴将记堡录的馅域传朵递给咳构造颠函数蚂。

乎犬例:DECLARE

TYPEstock_quote_recISRECORD

(symbolstock.symbol%TYPE

,bidNUMBER(10,4)

,askNUMBER(10,4)

,volumeNUMBERNOTNULL:=0

);

TYPEstock_tab_typISTABLEOFstock_quote_rec;

quote_liststock_tab_typ;

single_quotestock_quote_rec;

BEGIN

single_quote.symbol:='OPCL';

single_quote.bid:=100;

single_quote.ask:=101;

single_quote.volume:=25000;

--合法

quote_list:=stock_tab_typ(single_quote);

--不合法

quote_list:=stock_tab_typ('CSCO',75,76,3210000);

DBMS_OUTPUT.LINE(quote_list(1).bid);货集合阶的方盾法

势胳除了慢构造酬函数质外,出集合府还有怪很多门内建依函数初,这浪些函凭数称随为方古法。艺调用您方法错的语顽法如郑下:

坝瓶c坊ol港le宗ct斩io仔n.盒me蹈th框od

跪犁下表爆中列顾出o泥ra柴cl嘴e中具集合着的方果法方法描述使用限制COUNT返回集合中元素的个数DELETE删除集合中所有元素DELETE()删除元素下标为x的元素,如果x为null,那么集合保持不变对VARRAY非法DELETE(,)删除元素下标从X到Y的元素,如果X>Y集合保持不变对VARRAY非法EXIST()如果集合元素x已经初始化,那么返回TRUE,否那么返回FALSEEXTEND在集合末尾添加一个元素对Index_by非法EXTEND()在集合末尾添加x个元素对Index_by非法EXTEND(,)在集合末尾添加元素n的x个副本对Index_by非法FIRST返回集合中的第一个元素的下标号,对于VARRAY集合始终返回1。LAST返回集合中最后一个元素的下标号,对于VARRAY返回值始终等于COUNT.LIMIT返回VARRY集合的最大的元素个数,对于嵌套表和对于嵌套表和Index_by为nullIndex_by集合无用NEXT()返回在元素x之后及紧挨着它的元素的值,如果该元素是最后一个元素,那么返回null.PRIOR()返回集合中在元素x之前紧挨着它的元素的值,如果该元素是第一个元素,那么返回null。TRIM从集合末端开始删除一个元素对于index_by不合法TRIM()从集合末端开始删除x个元素对index_by不合法费燕关于辩集合拨之间捉的比捕较

俘话集合丧不能均直接浩用于前比拟鞋,要桨比拟鹊两个厦集合烟,可绍以设性计一棕个函包数,殿该函恼数返番回一召个标肠量数钱据类易型。IFstock_list1>stock_list2----非法

IFsort_collection(stock_list1)>sort_collection(stock_list2)THEN--合法密加但可闻以比军较在欢集合圈内的者两个础元素触。糖PL鸭/S夏QL导单行惧函数湾和组端函数影详解垮函数醋是一楚种有区零个越或多淋个参渗数并好且有屈一个编返回秃值的裳程序搂。在氧SQ贯L中修Or东ac椅le抬内建协了一浸系列身函数饶,这败些函异数都德可被功称为菌SQ掩L或鸣PL吗/S叠QL摩语句鞋,函上数主敏要分俘为两平大类前:

救踩穴单行牺函数

坐膜忘组函直数

栏怨本文束将讨寻论如纠何利徐用单闹行函邪数以垫及使谊用规帖那么。

半启SQ挠L中悬的单妨行函中数

母州SQ纤L和讨PL世/S撞QL痒中自岔带很滔多类醉型的洒函数喷,有唱字符并、数脖字、即日期体、转胞换、底和混螺合型夜等多返种函乎数用伞于处计理单轧行数扇据,李因此奔这些姑都可涛被统钩称为溜单行拐函数草。这浸些函恶数均破可用潜于S碧EL志EC配T,乳WH做ER盐E、尽OR亲DE杯R柴BY挖等子假句中白,例寻如下形面的果例子栽中就窗包含棕了T票O_手CH蒜AR踩,U蓝PP判ER剥,S半OU臂ND苏EX疯等单势行函液数。SELECTename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')

FROMemp

WhereUPPER(ename)Like'AL%'

ORDERBYSOUNDEX(ename)

惩芬单行寸函数堤也可遭以在乱其他偷语句牲中使聋用,老如u乔pd际at露e的认SE窄T子主句,半IN绳SE营RT担的V鲁AL性UE恭S子摔句,榨DE雁LE脑T的念WH减ER似E子援句,舅认证匙考试温特别去注意秧在S楚EL纵EC泼T语薪句中连使用筑这些晃函数远,所列以我束们的车注意路力也送集中纳在S捧EL挑EC芝T语抚句中榜。

躲窜NU碍LL目和单苦行函花数

靠阻在如尿何理苹解N灾UL恢L上车开始腐是很兴困难泳的,椅就算弄是一舒个很炸有经剪验的忌人依询然对葱此感嚼到困式惑。鹊NU奔LL见值表牵示一汇个未次知数呈据或楼者一士个空喂值,犹算术丛操作倘符的赏任何博一个姻操作滩数为脂NU榜LL杏值,吗结果庸均为督提个垄NU虫LL垦值,劲这个茫规那么辜也适腰合很剖多函轨数,各只有鞋CO丰NC猜AT墓,D买EC稻OD运E,搜DU交MP调,N巴VL敢,R膜EP谜LA机CE激在调施用了讽NU书LL酷参数朵时能扔够返蜂回非石NU数LL冤值。末在这周些中门NV仅L函谊数时蓬最重尤要的元,因凭为他蜻能直惨接处业理N乐UL菌L值湾,N炉VL折有两秩个参凳数:时NV答L(积x1梯,x殃2)腔,x绘1和侵x2杀都式阳表达势式,翠当x咽1为熄nu即ll酒时返介回X壮2,府否那么冶返回工x1蠢。

淹乖下面然我们甚看看妻em密p数艳据表叨它包乖含了备薪水艇、奖姥金两渣项,遵需要笛计算绍总的字补偿columnnameemp_idsalarybonus

keytypepk

nulls/uniquenn,unn

fktable

datatypenumbernumbernumber

length11.211.2

牵烟不是猛简单闸的将温薪水丸和奖槽金加骑起来麦就可烛以了亩,如裳果某辫一行池是n胸ul志l值拣那么盯结果围就将贞是n恐ul饺l,屑比方旱下面盆的例由子:updateemp

setsalary=(salary+bonus)*1.1

她线这个励语句倘中,结雇员鲁的工永资和邮奖金殊都将况更新纽为一爷个新委的值雹,但胃是如柜果没月有奖天金,狮即写sa员la锐ry言+呈n给ul妥l,邀那么跌就会追得出贸错误秒的结膏论,擦这个隆时候稍就要姿使用差nv逗l函代数来茫排除程nu断ll逐值的些影响璃。

因所以督正确货的语诸句是旱:updateemp

setsalary=(salary+nvl(bonus,0)*1.1秒单行锦字符浅串函谎数

智欢单行羞字符档串函堤数用削于操造作字虑符串用数据酬,他铜们大萝多数负有一钻个或强多个大参数嫩,其略中绝年大多职数返乱回字酷符串

走俱AS答CI朋I(察)

斤忙c1举是一扒字符嫩串,睁返回适c1棉第一轧个字课母的样AS蚊CI净I码碍,他望的逆震函数乒是C景H宗R(轧)SELECTASCII('A')BIG_A,ASCII('z')BIG_zFROMemp

BIG_ABIG_z

65122

戏克CH门R(担<i冰>)芦[N请CH畜AR酱_C围S]

庄哈i是中一个嫩数字刘,函晌数返据回十伸进制胀表示风的字归符selectCHR(65),CHR(122),CHR(223)FROMemp

CHR65CHR122CHR223

AzB

梳赚CO湖NC善AT插(,唱)

落绢c1器,c廉2均澡为字舞符串疑,函纤数将秆c2世连接裂到c题1的栏后面皱,如完果c酒1为忽nu帮ll狼,将醒返回燃c2演.如照果c却2为驼nu发ll办,那么蜡返回洗c1仗,如贱果c转1、柳c2瞒都为楼nu贡ll肠,那么间返回信nu记ll夕。他嘴和操杠作符倒||览返回织的结辱果相指同selectconcat('slobo','Svoboda')usernamefromdual

username

sloboSyoboda

唤帽IN欢IT狂CA优P(阶)

呜恨c1有为一页字符覆串。其函数您将每宜个单柔词的待第一科个字苏母大舞写其倒它字腾母小末写返贵回。毛单词镰由空究格,淋控制里字符魔,标星点符肤号限库制。selectINITCAP('veni,vedi,vici')Ceasarfromdual

Ceasar

Veni,Vedi,Vici

心矩IN骡ST朝R(除,[俩,<竞i>嚷[,鸽]]逗)

伴汤c1浇,c歉2均认为字氧符串挣,i新,j浓为整坝数。接函数鸟返回幼c2竞在c们1中丸第j诵次出脉现的激位置摔,搜宰索从屈c1咸的第陪i个湾字符售开始有。当袄没有翻发现柱需要雨的字吹符时沃返回知0,纤如果定i为龟负数返,那抄么搜既索将惯从右国到左土进行榨,但挥是位触置的技计算业还是拌从左祖到右影,i擦和j困的缺夕省值瞎为1鸦.selectINSTR('Mississippi','i',3,3)fromdual

INSTR('MISSISSIPPI','I',3,3)

11

selectINSTR('Mississippi','i',-2,3)fromdual

INSTR('MISSISSIPPI','I',3,3)

2

问狸IN伍ST装RB该(,描[,故i[逝,j弯])

驼浑与I丧NS雀TR禁〔〕删函数扮一样肯,只币是他钳返回妈的是嘱字节婚,对境于单仇字节爹IN戚ST驳RB柿()乌等于碎IN擦ST守R(平)

件条LE师NG漠TH朗()

阁务c1处为字裳符串芒,返耕回c汤1的员长度给,如拉果c何1为袋nu野ll顽,那愧么将菠返回耻nu枯ll搅值。selectLENGTH('IpsoFacto')ergofromdual

ergo

10

序辞LE蛛NG况TH脂b(万)

畏齿与L陡EN涉GT康H(柏)一泼样,零返回描字节纽。

骂适lo慈we篇r(垂)

浙吓返回健c的想小写弓字符遗,经被常出愉现在真wh烧er倒e子衫串中selectLOWER(colorname)fromitemdetailWHERELOWER(colorname)LIKE'%white%'

COLORNAME

Winterwhite

销迹LP河AD汽(,枕<i挎>[甚,]槐)

买提c1伯,c也2均倾为字泰符串店,i权为整喝数。丰在c洗1的武左侧隶用c雅2字和符串佣补足舒致长桥度i肺,可掌屡次讲重复钟,如巨果i躁小于辞c1稻的长插度,维那么贵只返急回i演那么宇长的贺c1租字符吃,其植他的忽将被敏截去割。c疏2的显缺省陡值为狠单空要格,蝴参见框RP觉AD热。selectLPAD(answer,7,'')padded,answerunpaddedfromquestion;

PADDEDUNPADDED

YesYes

NONO

Maybemaybe

奔坡LT闷RI你M(盗,)

碑枣把c纪1中垂最左转边的圈字符酷去掉流,使盯其第安一个畅字符治不在臣c2粮中,我如果要没有捧c2鸣,那扎么c参1就稼不会戚改变荷。selectLTRIM('Mississippi','Mis')fromdual

LTR

ppi

狡角RP裙AD滥(,誉<i章>[窜,]混)

穗蓬在c思1的育右侧关用c果2字阴符串往补足阿致长佣度i候,可四屡次作重复俗,如促果i蚂小于疾c1斥的长雀度,真那么抱只返冒回i量那么携长的续c1旺字符配,其彼他的鹿将被贝截去刷。c垄2的棍缺省恩值为贪单空雪格,晶其他稻与L猴PA件D相列似

浴玻RT殿RI圆M(渐,)

膨主把c涉1中恭最右旗边的披字符由去掉般,使斩其第供后一骄个字饭符不鸣在c个2中饼,如杯果没瓦有c粒2,会那么却c1焰就不还会改晃变。

岂巴RE都PL该AC棚E(麦,[陵,]疏)

国再c1考,c帜2,汉c3移都是堤字符联串,夏函数埋用c笋3代窗替出擦现在肆c1摆中的洽c2围后返撒回。selectREPLACE('uptown','up','down')fromdual

REPLACE

downtown

高繁ST却BS席TR望(,宇<i熟>[粒,]莲)

骨旗c1佩为一咏字符众串,求i,决j为昌整数凑,从份c1领的第桶i位矿开始辞返回羽长度表为j者的子减字符查串,姻如果取j为箭空,司那么直惧到串避的尾徐部。selectSUBSTR('Message',1,4)fromdual

SUBS

Mess

烈距SU粮BS镜TR堵B(档,<客i>选[,策])

悼畏与S名UB凭ST射R大胡致相冻同,白只是骨I,合J是剪以字勺节计当算。

券汇SO涌UN仰DE帅X(茧)

塑旅返回勿与c事1发刚音相雹似的汁词selectSOUNDEX('dawes')DawesSOUNDEX('daws')Daws,SOUNDEX('dawson')fromdual

DawesDawsDawson

D200D200D250

存屿TR赶AN拼SL影AT桌E(庆,,采)

况拒将c忘1中袋与c构2相浑同的劲字符兔以c久3代塘替selectTRANSLATE('fumble','uf','ar')testfromdual

TEXT

ramble

滴姻TR交IM葬([馆[]朱]昼fr械om进c域3)

响复将c叠3串沫中的普第一即个,酬最后篮一个重,或咽者都决删除崇。selectTRIM('spacepadded')trimfromdual

TRIM

spacepadded

岸奴UP迷PE并R(裕)

洁广返回匆c1济的大赤写,埋常出

温馨提示

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

评论

0/150

提交评论