概述
/******************************
索引表
元素个数没有限制,并且下标可以是负值
******************************/
DECLARE
TYPE cell_phone_type IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER; --以数字做索引TYPE phone_number IS TABLE OF NUMBER(11) INDEX BY VARCHAR2(100); --以varchar2做索引 index by 只能跟BINARY_INTEGER、PLS_INTEGER、VARCHAR2三种类型l_cell_phone_type cell_phone_type;
l_phone_number phone_number;
l_number_index VARCHAR2(100);
BEGIN
l_cell_phone_type(2) := 'Nokia 6210';
l_cell_phone_type(1) := 'HTC Magic';
l_phone_number('queen') := 18612345678;
l_phone_number('king') := 18687654321;
FOR i IN l_cell_phone_type.first .. l_cell_phone_type.last
LOOP
dbms_output.put_line(l_cell_phone_type(i));
END LOOP;
l_number_index := l_phone_number.first;
LOOP
EXIT WHEN l_number_index IS NULL;
dbms_output.put_line(l_number_index || ''' phone number is ' || l_phone_number(l_number_index));
l_number_index := l_phone_number.next(l_number_index);
END LOOP;
/******************************
output:
HTC Magic
Nokia 6210
king' phone number is 18687654321
queen' phone number is 18612345678
不管是先输入哪个 输出时候是按照排序规则顺序输出的
******************************/END;
/******************************
嵌套表
将数组类型作为一个字段存贮与表中
******************************/CREATE TYPE phone IS TABLE OF VARCHAR2(128);
CREATE TABLE contact(record_id NUMBER,
employee_id NUMBER,
phone_number phone) NESTED TABLE phone_number store AS phone_number;
drop TABLE contact;
drop TYPE phone;
DECLARE
l_phone phone;
BEGIN
INSERT INTO contact
VALUES
(1,
1,
phone('18612345678',
'0318-888888'));
INSERT INTO contact
VALUES
(2,
2,
phone('18612345678',
'0318-9999999'));
UPDATE contact
SET phone_number = phone('18612345678',
'0318-9999999',
'010-77777777')
WHERE record_id = 1;
COMMIT;
SELECT phone_number
INTO l_phone
FROM contact
WHERE record_id = 2;
FOR i IN l_phone.first .. l_phone.last
LOOP
dbms_output.put_line(l_phone(i));
END LOOP;
END;
/******************************
VARRAY
定长的数组
也可以作为table的列类型(省略)
******************************/
declare
type phone is type of varray(20) of varchar2(100);--一个20个元素的字符串数组
l_phone phone
begin
for i in 1..20 loop
l_phone(i):=to_char(2*i+1);
end loop;
end;
/******************************
多维数组
varry 和 索引表都可以 varry为固定元素个数的多维数组
******************************/
type v1 is type of varray(100) of varchar2(100);
type v2 is type of varray(100) of v1;--v2就是100×100的字符串数组
type v3 is table of varchar2(100) index by binary_integer;
type v4 is table of v3 index by binary_integer;--v4是行和列都不确定的字符串二维数组
type v5 is table of v1 index by binary_integer;--可以组合使用 比如列固定 行不固定
--v5还可以有另一种实现 比如v7
type v6 is record
(name varchar2(100),
birth date);
type v7 is table of v6 index by binary_integer;
/******************************
函数
******************************/
v.count;--个数
v.delete;--删除全部
v.delete(1);--删除索引1
v.delete(1,3);--删除索引1..3
v.first;
v.last;
v.prior(i);--i的前一个索引 不一定是i-1 因为有可能已经被delete了
v.next(i);--i的下一个索引 也不一定是i+1
v.exists(i);--是否存在索引是i的元素
/******************************
异常
******************************/
COLLECTION_IS_NULL --- 调用一个空集合的方法 , 集合未被初始化
NO_DATA_FOUND --- 下标索引指向一个被删除的元素,或是关联数组中不存在的元素
SUBSCRIPT_BEYOND_COUNT --- 下标索引值超过集合中的元素个数SUBSCRIPT_OUTSIDE_LIMIT ---下标索引超过允许范围之外
VALUE_ERROR --- 下标索引值为空,或是不是指定的下标类型
最后
以上就是活泼镜子为你收集整理的oracle字符数组初始化,oracle 数组学习 学习笔记的全部内容,希望文章能够帮你解决oracle字符数组初始化,oracle 数组学习 学习笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复