分享
 
 
 

在Oracle9i Release 2中使用PL/SQL的集合增强

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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_listdeptno_coll;

dname_listdname_coll;

loc_listloc_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_listdept_coll;

begin

select * bulk collect into dept_list from dept;

end;

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

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

Declare

dept_rowdept%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

foorowfootab%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- 王朝網路 版權所有