集合:是具有相同定义的元素的聚合。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;--多维数组
DECLARETYPE 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
在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;--多维数组
DECLARETYPE 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
解决方案 »
- ODP.NET连接数据库的连接字符串问题
- 问个有关oracle如何实现自增长的问题
- 在存储过程中的显示问题?
- imp导入*.dmp发现触发器不见了
- 100分求一个简单的存储过程!解决了,立即结帖!!!
- 权限设置问题,对于表里面某些记录(where)开放给某个用户进行update、delete、insert操作可以吗?
- 求sql语句:要知道上个月的今天,这个sql语句怎么写?
- 写一个存储过程统计表中记录个数的问题
- 怎么锁定一个表的读或者读写?
- Oracle Ebs R12 单点登陆解决方案
- 要向数据库中导数据 oracle10g
- 请教:怎么使触发器实现把编号处理为0000001的方法。并求PL/SQL的帮忙文档
定义:
TYPE ArtSort is table of tarticle.fsort%type index by binary_integer;
vSort ArtSort;
nSortIndex binary_integer;
cursor c is
select * from table1;
使用:
nSortIndex := 0;
for r in c loop
nSortIndex := nSortIndex + 1;
vSort(nSortIndex) := r.FCODE;
end loop;
如:
定义:
TYPE ArtSort is table of emp_type index by binary_integer;
vSort ArtSort;
nSortIndex binary_integer;
cursor c is
select * from table1;
使用:
nSortIndex := 0;
for r in c loop
nSortIndex := nSortIndex + 1;
vSort(nSortIndex).emp_id := r.gid;
vSort(nSortIndex).emp_name := r.name;
end loop;
vValue := vSort(1);
或
vValue := vSort(1).emp_id;
type intarray is varry(30) of integer;用下面语句声明一个数组变量
declare
A intarray;
这是什么意思啊?呵呵