分享
 
 
 

Oracle PL/SQL集合增强

王朝oracle·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

Oracle Release 2 非常有力地增强了PL/SQL 集合功能,它可以对以前的发布版本进行代码维护。例如,可以在Release 2 中将PL/SQL 集合用作一个单一的参数,从而避免了使用一长串单个的字段作为参数。

另外一个优点是记录的集合现在可以是BULK COLLECTION INTO 子句的目标。而在Release 2 以前,我们必须为返回的每个列创建一个集合。例如:

Declare

type deptno_coll is table of dept.deptno%type;

type dname_coll is table of dept.dname%type;

type loc_coll is table of dept.loc%type;

deptno_list deptno_coll;

dname_list dname_coll;

loc_list loc_coll;

begin

select * bulk collect into deptno_list,dname_list,loc_list from dept;

end;

在Release 2中变成了:

Declare

type dept_coll is table of dept%rowtype;

dept_list dept_coll;

begin

select * bulk collect into dept_list from dept;

end;

注意这里不再是对字段名的引用。如果DEPT 表的字段个数或者名称被修改,也不需要对第二段示例代码进行改动。这段代码还比旧版本易于维护。然而,应用程序需要一个Release 2 数据库来编译。

现在可以使用记录以集合方式将一行数据插入到一个表中。在Release 2 之前,必须插入到表中一个PL/SQL 记录然后再单独地确定每一个字段,作法如下:

Declare

dept_row dept%rowtype;

begin

/* populate dept_row . . . */

insert into dept values (dept_row.deptno,dept_row.dname,dept_row.loc);

end;

而在Release 2中可以将插入语句简化为:

insert into dept values dept_row;

记录可以以集合方式更新一个表中的数据。像插入语句一样,以前必须单独地更新每一个字段:

update dept

set deptno = dept_row.deptno,

dname = dept_row.dname,

loc = dept_row.loc

where deptno = dept_row.deptno;

而在Release 2中,则可以根据在记录中的位置来更新整条数据:

update dept set row = dept_row where deptno = dept_row.deptno;

(注意“SET ROW”是一个新子句。)

可以使用记录从DML 语句的RETURNING 子句中检索信息。通常在更新数据时保持一个本地副本以备以后的PL/SQL 操作会比较有用。在Release 2 以前,我们可以在计算和调用完成之后使用RETURNING 子句将数据存储到某个地方。而在Release 2 中,就可以把数据存储到一条记录中。例如,下面是Release 2 之前的作法:

Declare

foorow footab%rowtype;

begin

insert into footab (foono,fooname) values (fooseq.nextval,'Foo')

returning foono,fooname into foorow.foono,foorow.fooname;

end;

而现在可以把插入语句简化为:

insert into footab (foono,fooname) values (fooseq.nextval,'Foo')

returning foono,fooname into foorow;

这些增强使得语法更加易读,并能帮助我们避免由于在返回语句中将表匹配错误所引起的程序错误。但是要记住这些增强要依赖于表和记录中第一个字段的物理位置。如果一个表的字段位置发生变化,那么字段的顺序也会变化。因此,在一个数据库表中使用ROWTYPE 匹配字段比显式地列出字段名要好。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有