您好,欢迎访问一九零五行业门户网

Oracle 11g Release 1 (11.1) PL/SQL_理解 Collection 类型

了解 oracle 集合意义在于:当我们采用编程语言开发应用程序时,对其内置的集合类型,如数组、链表等,使用得很多,也很方便,但
本文内容
定义 collection 类型 声明 collection 变量 初始化和引用 collection 引用 collection 元素 给 collection 赋值  多维 collection 比较 collection collection 方法 collection 异常  了解 oracle 集合意义在于:当我们采用编程语言开发应用程序时,对其内置的集合类型,如数组、链表等,使用得很多,也很方便,但是当业务逻辑变得复杂时,如需要同时向多个表插入数据,和一个表插入多条数据,也许还需要事物控制,此时使用匿名子程序似乎很合适。那么,在匿名子程序中使用集合类型就不可避免。
另外,若有一个用编程语言写的函数,其涉及集合操作,出于某种必要的原因,想改写成 oracle 函数,那么,对了解 oracle 集合操作很有必要。 
定义 collection 类型 先定义 collection 类型,之后再声明该类型的变量。
你可以在模式级别、包或 pl/sql 块内定义一个 collection 类型。
在模式级别创建的 collection 类型是 standalone stored type。用 create type 语句创建。它存储在数据库,直到用 drop type 语句删除该类型。
在包内创建的 collection 类型是 packaged type。它存储在数据库,直到用 drop package 语句删除包。
在 pl/sql 块创建的 collection 类型只在块内可用,只有块嵌入在 standalone 或 packaged subprogram 中它才存储在数据库。
collection 类型遵循与其他类型、变量一样的作用域和实例化规则。当你输入一个块或子程序时,collection 被实例化,当退出时,销毁。在一个包中,当初从引用包时,collection 被实例化,并在结束数据库会话时,销毁。
你可以在任何 pl/sql 块、子程序,或包的声明部分,使用 type 来定义 table 和 varray 类型。
对于在 pl/sql 内声明的 nested table 和 varray,table 或 varray 的元素类型可以是,除了 ref cursor 以外的任意 pl/sql 数据类型。
当定义一个 varray 类型时,必须用一个正整数指定最大大小。如下所示,定义一个能最多存储 366 个日期的 varray:
declare
type calendar is varray(366) of date;
associative arrays 可以用任意键值插入元素。键不需要是连续的。键的数据类型可以是 pls_integer、varchar2,或 varchar2 子类型的一个:varchar、string、或 long.
必须指定基于 varchar2 键的长度,除了 long,因为,,它等价于声明一个 varchar2(32760) 类型的键。类型 raw、long raw、rowid、char 和 character 不允许做为一个 associative array 的键。long 和 long raw 仅仅是为了向后兼容。
不允许初始化子句。associative arrays 没有构造标记。当使用基于 varchar2 键来引用 associative arrays 中的一个元素时,你可以使用如 date 或 timestamp 等类型,只要该类型可以用 to_char 函数转换成 varchar2。
声明 collection 变量 定义一个 collection 类型后,用该类型声明变量。在声明中使用新类型名,同预定义类型一样,如 number。
示例 1:演示声明 nested table、varray 和 associative array
varchar2(30); type varray_type number varchar2(32) varchar2(32) index by varchar2(64); v1 nested_type; v2 varray_type; v3 assoc_array_num_type; v4 assoc_array_str_type; v5 assoc_array_str_type2; begin -- an arbitrary number of strings can be inserted v1 v1 := nested_type('shipping', 'sales', 'finance', 'payroll'); v2 := varray_type(1, 2, 3, 4, 5); -- up to 5 integers v3(99) := 10; -- just start assigning to elements v3(7) := 100; -- subscripts can be any integer values v4(42) := 'smith'; -- just start assigning to elements v4(54) := 'jones'; -- subscripts can be any integer values v5('canada') := 'north america'; -- just start assigning to elements v5('greece') := 'europe'; -- subscripts can be string valuesend;/
其它类似信息

推荐信息