王朝网络
分享
 
 
 

Oracle初学者笔记终结篇--集合和成员函数

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

集合

PL/SQL表

在PL/SQL块中临时使用,象数组一样的对象,但不会用来定义表中的字段;

包含一列和一个主键;不能对列和主键进行命名;

列可以是任何标量数据类型;

主键必须是binary_integer类型;

大小没有限制;

定义PL/SQL表的步骤:

1, 定义表的类型;type typename is table of col_def index by binary_integer;

2, 声明该类型的一个PL/SQL表;tablename typename;

引用PL/SQL表:

使用主键值引用PL/SQL表中的行;

Tablename(key_value)

给PL/SQL表的某行赋值:

Tablename(key_value):=expression;

一个例子:

declare

type student_type is table of varchar(10) index by binary_integer;

stu1 student_type;

begin

stu1(1):='Tom';

stu1(2):='fuck';

for i in 3..10 loop

stu1(i):='com.'||i;

end loop;

for i in 1..10 loop

dbms_output.put_line('The '||i||' is : '||stu1(i));

end loop;

end;

/

PL/SQL表自带了集合函数.delete(i)可以按索引删除第I个元素;

可以不按顺序赋值;

可变数组的宽度是一定的,PL/SQL是无限的,可称为快表;

记录

为什么使用记录?我们知道%rowtype类型可以使我们获得一个行级变量存放整个行;但是为了获得更大的灵活性,我们希望能够定义一个包括了某几个我们需要的字段的变量而不是整个行的所有字段都被包括的变量;这时候我们用记录;

定义类型:type typename is recode(列定义…..);

声明一个该类型的记录变量:recordtype typename;

引用字段:recordname.columnname

赋值:

例子:

declare

type stuRecordType is record

(

id student.stuid%type,

name student.stuname%type,

se student.se%type

);

stuRec stuRecordType;

begin

select stuid,stuname,se into stuRec from student

where stuid='101';

dbms_output.put_line(sturec.id||' '||sturec.name||' '||sturec.se);

exception

when no_data_found then

dbms_output.put_line('no data');

end;

/

一个记录内部可以嵌套其他的记录;

批量绑定:

对PL/SQL变量的赋值;

一次绑定一个集合

提高DML的性能;

Forall关键字用于要在发送到SQL引擎之前对输入集合进行批量绑定;

成员函数和过程

抽象数据类型中定义成员函数和过程;类似Java类中的方法;

构造函数你已经使用过了,它无须显式定义,与对象类型同名;

定义带有函数和过程的对象类型时声明和主体的定义仍然是分开的;

例子:

声明:

create or replace type person_type as object

(

id int,

name varchar(20),

member function getid return int,

member procedure setid(pid int),

member function getname return varchar,

member procedure setname(pname varchar)

) not final;

主体定义:/

create or replace type body person_type as

member function getid return int is

begin

return id;

end getid;

member procedure setid(pid int) as

begin

id:=pid;

end setid;

member function getname return varchar is

begin

return name;

end getname;

member procedure setname(pname varchar) is

begin

name:=pname;

end setname;

end;

/

使用:

1 declare

2 p person_type;

3 begin

4 p:=person_type(1001,'com');

5 dbms_output.put_line('id: '||p.getid);

6 dbms_output.put_line('name: '||p.name);

7 p.setid(1002);

8 p.setname('mike');

9 dbms_output.put_line('id: '||p.getid);

10 dbms_output.put_line('name: '||p.name);

11* end;

id: 1001

name: com

id: 1002

name: mike

其实当我们有了p这个变量后就可以直接访问id: p.id;

我们需要清醒的是这里的类型不是一个表,而是将来可以成为一个表中一个行的类型控制描述;用构造函数构造的只是一个表的一行而不是一个表;当然我们可以用这个类型来定义一个对象表,这样的话,我没什么说的了,因为我已经不明白了;

create table persontable of person_type;

因为对对象表来说我们有两种插入的方法:

insert into persontable values(2001,'fuck');

或构造一个对象插进去:

insert into persontable values(person_type(2002,'me'))

/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝网络 版权所有