ORACLE集合数据类型知识整理.sql
2014-09-18 16:24
369 查看
-- 定义数组的大小200,以及所能存储的最大字节数2000
CREATE OR REPLACE TYPE va_planguage IS VARRAY(200) OF VARCHAR2(2000);
DECLARE
lang va_planguage;
BEGIN
lang:=va_planguage('可变数组中的数据ONE','可变数组中的数据TWO','可变数组中的数据THREE');
FOR i IN 1..lang.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(lang(i));
END LOOP;
END;
-- 嵌套表Nested table的声明及初始化(一个汉字两个字节)
CREATE OR REPLACE TYPE nt_planguage IS TABLE OF VARCHAR2(19);
DECLARE
lang nt_planguage;
BEGIN
lang:=nt_planguage('嵌套表测试数据ONE','嵌套表测试数据TWO','嵌套表测试数据THREE');
FOR i IN 1..lang.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(lang(i));
END LOOP;
END;
-- 关联数组Associative array(Index_by table)声明与初始化测试
DECLARE
TYPE ib_planguage IS TABLE OF VARCHAR2(1000) INDEX BY PLS_INTEGER;
lang ib_planguage;
idx PLS_INTEGER;
BEGIN
lang(1):='关联数组ONE';
lang(9):='关联数组TWO';
lang(3):='关联数组THREE';
idx:=lang.FIRST;
WHILE(idx IS NOT NULL) LOOP
DBMS_OUTPUT.PUT_LINE(lang(idx));
idx:=lang.NEXT(idx);
END LOOP;
END;
/*
Oracle支持3种类型的集合:
关联数组(Associative array,即Index-by table)
嵌套表(Nested table)
变长数组(VARRAY)
它们的区别之一是: Nested table与VARRY既可以被用于PL/SQL,也可以被直接用于数据库中,
但是Associative array不行,
也就是说,Associative array是不能通过CREATE TYPE语句进行单独创建,
只能在PL/SQL块(或Package)中进行定义并使用(即适用范围是PL/SQL Block级别),
而Nested table与VARRAY则可以使用CREATE TYPE进行创建(即适用范围是Schema级别),
它们还可以直接作为数据库表中列的类型。
Associative array的索引可以是稀疏的(即可以不连续)。
Nested table既可以通过CREATE TYPE声明成全局类型,也可以在PL/SQL块中声明块级别的类型。
与Associative array不同,Nested table变量需要显式初始化
Nested table初始化之后还需要调用EXTEND过程,扩展此集合的“容量”。
1)VARRAY可以在声明时限制集合的长度,
EXTEND的长度不能大于集合声明时的长度,
但是在给集合成员赋值时,以EXTEND为准
(2)其索引总是连续的,而Nested table的索引在初始化赋值时是连续的,
不过随着集合元素被删除,可能变得不连续。
通常来说,对集合类型的第一选择应该是Associative array,
因为它不需要初始化或者EXTEND操作,并且是迄今为止最高效的集合类型。
唯一不足的一点是它只能用于PL/SQL而不能直接用于数据库。
如果需要允许使用负数索引,应该选择Associative array;
如果需要使用10g,11g中的那些集合操作,应该选择Nested table;
如果需要限制集合元素的个数,应该选择VARRAY
*/
CREATE OR REPLACE TYPE va_planguage IS VARRAY(200) OF VARCHAR2(2000);
DECLARE
lang va_planguage;
BEGIN
lang:=va_planguage('可变数组中的数据ONE','可变数组中的数据TWO','可变数组中的数据THREE');
FOR i IN 1..lang.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(lang(i));
END LOOP;
END;
-- 嵌套表Nested table的声明及初始化(一个汉字两个字节)
CREATE OR REPLACE TYPE nt_planguage IS TABLE OF VARCHAR2(19);
DECLARE
lang nt_planguage;
BEGIN
lang:=nt_planguage('嵌套表测试数据ONE','嵌套表测试数据TWO','嵌套表测试数据THREE');
FOR i IN 1..lang.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(lang(i));
END LOOP;
END;
-- 关联数组Associative array(Index_by table)声明与初始化测试
DECLARE
TYPE ib_planguage IS TABLE OF VARCHAR2(1000) INDEX BY PLS_INTEGER;
lang ib_planguage;
idx PLS_INTEGER;
BEGIN
lang(1):='关联数组ONE';
lang(9):='关联数组TWO';
lang(3):='关联数组THREE';
idx:=lang.FIRST;
WHILE(idx IS NOT NULL) LOOP
DBMS_OUTPUT.PUT_LINE(lang(idx));
idx:=lang.NEXT(idx);
END LOOP;
END;
/*
Oracle支持3种类型的集合:
关联数组(Associative array,即Index-by table)
嵌套表(Nested table)
变长数组(VARRAY)
它们的区别之一是: Nested table与VARRY既可以被用于PL/SQL,也可以被直接用于数据库中,
但是Associative array不行,
也就是说,Associative array是不能通过CREATE TYPE语句进行单独创建,
只能在PL/SQL块(或Package)中进行定义并使用(即适用范围是PL/SQL Block级别),
而Nested table与VARRAY则可以使用CREATE TYPE进行创建(即适用范围是Schema级别),
它们还可以直接作为数据库表中列的类型。
Associative array的索引可以是稀疏的(即可以不连续)。
Nested table既可以通过CREATE TYPE声明成全局类型,也可以在PL/SQL块中声明块级别的类型。
与Associative array不同,Nested table变量需要显式初始化
Nested table初始化之后还需要调用EXTEND过程,扩展此集合的“容量”。
1)VARRAY可以在声明时限制集合的长度,
EXTEND的长度不能大于集合声明时的长度,
但是在给集合成员赋值时,以EXTEND为准
(2)其索引总是连续的,而Nested table的索引在初始化赋值时是连续的,
不过随着集合元素被删除,可能变得不连续。
通常来说,对集合类型的第一选择应该是Associative array,
因为它不需要初始化或者EXTEND操作,并且是迄今为止最高效的集合类型。
唯一不足的一点是它只能用于PL/SQL而不能直接用于数据库。
如果需要允许使用负数索引,应该选择Associative array;
如果需要使用10g,11g中的那些集合操作,应该选择Nested table;
如果需要限制集合元素的个数,应该选择VARRAY
*/
相关文章推荐
- Oracle 10g复合数据类型pl/sql集合学习六——索引表、嵌套表、变长数组
- Oracle 三种集合数据类型的比较
- SQL与C++的数据类型对应关系(网上资料搜集整理)
- MySql Oracle SqlServer三大数据库的数据类型列表
- 解决从pl/sql查看oracle的number(19)类型数据为科学计数法的问题
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- Oracle集合数据类型的比较
- oracle pl/sql中使用自定义数据类型
- Oracle三种集合数据类型的比较
- PL/SQL 集合数据类型(关联数组)
- 整理网上java数据类型、堆、栈知识(二)
- PL/SQL复合数据类型—record,集合(索引表,嵌套表,VARRAY)—之四
- sql数据类型基本知识
- 【oracle资料整理】--【1】ORACLE中字段的数据类型
- 整理网上java数据类型、堆、栈知识(一)
- Oracle 三种集合数据类型的比较
- SQL2005数据类型简单整理
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数