本文内容
- 定义 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 arrayDECLARETYPE nested_type IS TABLE OF VARCHAR2(30);TYPE varray_type IS VARRAY(5) OF INTEGER;TYPE assoc_array_num_type IS TABLE OF NUMBER INDEX BY PLS_INTEGER;TYPE assoc_array_str_type IS TABLE OF VARCHAR2(32) INDEX BY PLS_INTEGER;TYPE assoc_array_str_type2 IS TABLE OF 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 v1v1 := nested_type("Shipping", "Sales", "Finance", "Payroll");v2 := varray_type(1, 2, 3, 4, 5); -- Up to 5 integersv3(99) := 10; -- Just start assigning to elementsv3(7) := 100; -- Subscripts can be any integer valuesv4(42) := "Smith"; -- Just start assigning to elementsv4(54) := "Jones"; -- Subscripts can be any integer valuesv5("Canada") := "North America";-- Just start assigning to elementsv5("Greece") := "Europe";-- Subscripts can be string valuesEND;/
Oracle 11g Release 1 (11.1) PL/SQL_了解 Collections 和 Records 类型Oracle 11g Release 1 (11.1) PL/SQL_理解 Record 类型相关资讯 Oracle存储过程
- Oracle存储过程拼接in语句 & 自定 (今 09:21)
- 【PL/SQL系列】Oracle存储过程使用 (04月23日)
- Oracle存储过程及Java调用 (05/28/2015 20:29:33)
| - Java调用Oracle存储过程返回多条结 (04月29日)
- Oracle中的存储过程简单应用 (04月10日)
- 判断点是否落在面中的Oracle存储过 (05/09/2015 09:39:30)
|
本文评论 查看全部评论 (0)