扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
除了构造函数外,集合还有很多内建函数,这些函数称为方法。 调用方法的语法如下: collectionmethod 下表中列出oracle中集合的方法 方法 描述 使用限制 COUNT 返回集合中元素的个数 DELETE 删除集合中所有元素 DELETE() 删除元素下标为x的元素oracle怎么使用数组
10年积累的网站制作、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有越城免费网站建设让你可以放心的选择与我们合作。
集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:
可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。
嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。
在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE
和Table
of
Record来代替多维数组,一样挺好用的。
emp_type
就好象一个table
中的一条record
一样,里面有id,
name,gender等。emp_type_array
象个table,
里面含有一条条这样的record
(emp_type),就象多维数组一样。
--单维数组
DECLARE
TYPE
emp_ssn_array
IS
TABLE
OF
NUMBER
INDEX
BY
BINARY_INTEGER;
best_employees
emp_ssn_array;
worst_employees
emp_ssn_array;
BEGIN
best_employees(1)
:=
'123456';
best_employees(2)
:=
'888888';
worst_employees(1)
:=
'222222';
worst_employees(2)
:=
'666666';
FOR
i
IN
1..best_employees.count
LOOP
DBMS_OUTPUT.PUT_LINE('i='||
i
||
',
best_employees=
'
||best_employees(i)
||
',
worst_employees=
'
||worst_employees(i));
END
LOOP;
END;
--多维数组
DECLARE
TYPE
emp_type
IS
RECORD
(
emp_id
employee_table.emp_id%TYPE,
emp_name
employee_table.emp_name%TYPE,
emp_gender
employee_table.emp_gender%TYPE
);
TYPE
emp_type_array
IS
TABLE
OF
emp_type
INDEX
BY
BINARY_INTEGER;
emp_rec_array
emp_type_array;
emp_rec
emp_type;
BEGIN
emp_rec.emp_id
:=
300000000;
emp_rec.emp_name
:=
'Barbara';
emp_rec.emp_gender
:=
'Female';
emp_rec_array(1)
:=
emp_rec;
emp_rec.emp_id
:=
300000008;
emp_rec.emp_name
:=
'Rick';
emp_rec.emp_gender
:=
'Male';
emp_rec_array(2)
:=
emp_rec;
FOR
i
IN
1..emp_rec_array.count
LOOP
DBMS_OUTPUT.PUT_LINE('i='||i
||',
emp_id
='||emp_rec_array(i).emp_id
||',
emp_name
='||emp_rec_array(i).emp_name
||',
emp_gender
=
'||emp_rec_array(i).emp_gender);
END
LOOP;
END;
--------------
Result
--------------
i=1,
emp_id
=300000000,
emp_name
=Barbara,
emp_gender
=
Female
i=2,
emp_id
=300000008,
emp_name
=Rick,
emp_gender
=
Male
declare
--定义IntArray 类型,该类型是每个元素为int类型的数组
Type IntArray is table of int;
--定义一个IntArray 类型的变量
v_array IntArray := IntArray();
begin
--向数组中存入数据
for i in 1.. 100 loop
--需要扩展数组
v_array.extend;
v_array(i) := i;
end loop;
--输出数组的内容
for i in 1.. 100 loop
dbms_output.put_line(v_array(i));
end loop;
end;
SQL set serverout on;
SQL declare
2 --定义IntArray 类型,该类型是每个元素为int类型的数组
3 Type IntArray is table of int;
4 --定义一个IntArray 类型的变量
5 v_array IntArray := IntArray();
6 begin
7 --向数组中存入数据
8 for i in 1.. 100 loop
9 --需要扩展数组
10 v_array.extend;
11 v_array(i) := i;
12 end loop;
13
14 --输出数组的内容
15 for i in 1.. 100 loop
16 dbms_output.put_line(v_array(i));
17 end loop;
18 end;
19 /
1
2
3
4
5
6
7
8
9
10
此处省略90行
PL/SQL procedure successfully completed
SQL
oracle这么强大的数据库能使用数组的
在oracle中,数组主要是用来存储批量数据,一次性的对数据库进行插入,更新,删除操作。
下面给你一个批量插入的例子,其他都类似的
这是我的blog上面有例子,你自己看看吧。
首先你需要定义一个数组类型,然后定义这个数组变量
declare
type a_type is table of number;
-- type a_type is array(10) of number;
-- 下面一种定义方式则指定了该数组的最大元素个数
a a_type := a_type(); -- 定义并初始化一个数组变量
begin
a.extend(3); -- 数组扩展到3个元素
a(1) := 1;
a(2) := 10;
a(3) := 100;
end;
另外数组还有一下方法和属性
first -- 第一个元素下标
last -- 最后一个元素下标
count -- 数组元素个数
prior(n) -- 下标 n 的前一个元素下标
next(n) -- 下标 n 后一个元素下标
extend(n) -- 添加 n 个数组元素,不带参数添加一个数组元素
delete(n) -- 删除数组中下标为 n 的元素,不带参数删除整个数组元素
可变数组,是一种集合。一个可变数组是一个对象的集合,其中每个对象都具有相同的数据类型。可变数组的大小在创建时决定。在表中创建可变数组后,可变数组在主表中即为一个列。
可变数组特性
1)可变数组主要的特性即是元素的最大个数是有限制
2)可变数组下标固定为1,上限可以扩展
3)在可变数组声明时自动设置为NULL值.所谓的空值指的是集合本身是空,不是针对它所拥有的元素,故在元素引用前需要对其进行初始化
可变数组创建语法:
CREATE [OR REPLACE] TYPE 类型名称 IS VARRAY(长度) OF 数据类型;
例如:定义一个可变数组类型 my_varray ,它的最大容量是5,元素类型是 VARCHAR2.
1、简单类型的可变数组
2、定义TYPE类型的可变数组
输出结果:公司code:204
3、定义二维可变数组
输出结果:
4、定义复合类型的可变数组
输出结果:
事故号:AAA 版本号:1 有效标识:1
事故号:BBB 版本号:2 有效标识:1
事故号:CCC 版本号:3 有效标识:0
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流