十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
集合:是具有相同定义的元素的聚合。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
可变数组,是一种集合。一个可变数组是一个对象的集合,其中每个对象都具有相同的数据类型。可变数组的大小在创建时决定。在表中创建可变数组后,可变数组在主表中即为一个列。
可变数组特性
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
ORACLE在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE 和Table of Record来代替多维数组,一样挺好用的。
集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:
可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。
嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。
type intarray is varry(30) of integer;
A intarray;
TYPE T_EMP IS TABLE OF EMP%ROWTYPE INDEX BY BINARY_INTEGER;
A_EMP T_EMP;
I BINARY_INTEGER := 0;
FOR REC IN (SELECT EMPNO,ENAME FROM EMP) LOOP
I := I + 1;
A_EMP(I).EMPNO := REC.EMPNO;
END LOOP;
l:= A_EMP.first;--使用first方法
loop
exit when l is null;
dbms_output.put_line(l||’:’|| A_EMP(l).ENAME );
l:=A_EMP.next(l);
end loop;
pl/sql预定义了在varray 和嵌套表实例上进行调用的方法。这些方法能在集合上执行一定的功能。
EXISTS该函数返回集合中第一个元素的索引,如果集合为空,返回NULL
Collection.EXISTS(index)
COUNT该函数集合元素的数目
Collection.COUNT
DELETE该过程从嵌套表中删除一个或多个或合部元素
Table_name.DELETE 删除所有元素
Table_name.delete(index)删除指定索引的记录
Table_name.delete(start_index,end_index)删除区间内元素
FIRST返回集合第一个元素索引,如果集合为空,返回NULL
Collection.FIRST
LAST返回集合中最后一个元素索引,如果集合为空,返回NULL
Collection. LAST
NEXT返回集合当前元素的下一个元素的索引,如果它不存在就返回NULL
Collection. NEXT
PRIOR返回集合当前元素的上一个元素的索引,如果它不存在就返回NULL
Collection. PRIOR
LIMIT返回varray中创建元素的最大个数
Collection. LIMIT
EXTENDS该过程在集合的末尾添加新的元素
Collection.EXTEND添加一个NULL元素;Collection.extends(n)添加N个NULL元素,Collection.extend(n,index)添加由index指定位置上元素的n个副表
TRIM从集合末尾处删除元素
Collection.TRIM 删除最后一个元素
Collection.TRIM(n)删除最后N个元素
除了构造函数外,集合还有很多内建函数,这些函数称为方法。 调用方法的语法如下: collectionmethod 下表中列出oracle中集合的方法 方法 描述 使用限制 COUNT 返回集合中元素的个数 DELETE 删除集合中所有元素 DELETE() 删除元素下标为x的元素oracle怎么使用数组
定义比如:TYPE test IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
用就直接:test(1):=3;就行
作用:就是类似程序语言中的数组
可以!
1、先定义用户类型:
create or replace type Va as varray(10) of char(5);
定义Va为十个元素是char(5)类型
2、再定义进表中:
create table photo (
id varchar2(2),
address varchar2(10),
My_va Va);