变长数组

来源:互联网 发布:离线自学武术软件 编辑:程序博客网 时间:2024/05/01 10:29
变长数组与嵌套表一样,需要使用构造方法进行初始化,否则其值将为NULL。
定义构造函数既可以在语句块的声明部分,也可以在语句块的执行体部分。
在构造函数中创建的初始值将从1开始安排索引,如果访问索引之外的元素,
Oracle将会抛出下标超出数量的错误。与嵌套表相同的是可以使用EXTEND来
扩展范围,但是必须注意的是,EXTEND不能超过变长数组的最大长度。
DECLARE
    TYPE  projectlist IS VARRAY(50) OF VARCHAR2 (16);--定义项目列表变长数组
    TYPE  empno_type IS VARRAY(10) OF NUMBER(4);--定义员工编号变长数组
    --声明变长数组类型的变量,并使用构造函数进行初始化
    project_list projectlist := projectlist('网站','ERP','CRM','CMS');
    empno_list   empno_type;--声明变长数组类型的变量
BEGIN
    DBMS_OUTPUT.PUT_LINE(project_list(3));--输出第3个元素的值
    project_list.EXTEND;                  --扩展到第5个元素
    project_list(5) := 'WORKFLOW';          --为第5个元素赋值
    empno_list := empno_type(7011,7012,7013,7014,null,null,null,null,null,null);
    --为第9个元素赋初值
    empno_list(9):= 8011;
    DBMS_OUTPUT.PUT_LINE(emp_list(9));--输出第9个元素的值
END;
8.2.9数据库中的变长数组
和嵌套表一样,变长数组也可以作为数据库表的列数据被存储到数据库中,在使用前,必须先使用
CREATE TYPE语句在数据字典中创建一个变长数组的类型,语法如下:
CREATE OR REPLACE TYPE empname_varray_type IS VARRAY(20) OF VARCHAR2(20);
CREATE TABLE dept_varray
(deptno NUMBER(2),
 dname  VARCHAR2(20),
 emplist empname_varray_type
);
在代码中,empname_varray_type是一个具有20个元素的VARCHAR2类型的变长数组,在定义CREATE
TABLE语句时,直接使用这个创建的empname_varray_type类型作为其列类型,可以看到,在使用
变长数组的列中,并没有指定STORE AS 来指定变长数组的存储表,这是因为变长数组的存储组织与数据库
行是完全相同的,数据是作为数据库表数据进行存储的,因为不需要指定一个存储表的名字进行存储。
操纵变长数组列:
DECLARE
    emp_list empname_varray_type := empname_varray_type
    ('史密斯','杰克','汤姆','丽莎','简','史泰龙');
BEGIN
    INSERT INTO dept_varray
         VALUES (20,'维修组','emp_list');--向表中插入变长数组数据
    INSERT INTO dept_varray                --直接在INSERT语句中初始化变长数组数据
         VALUES (30,'机加工',
         empname_varray_type('张3','刘七','赵五','阿4','阿5','阿6'));
    SELECT emplist
      INTO emp_list
      FROM dept_varray
     WHERE deptno = 20;--使用SELECT语句从表中取出变长数组数据
     emp_list(1) := '杰克张';--更新变长数组数据的内容
     UPDATE dept_varray
        SET emplist = emp_list
      WHERE deptno = 20;--使用UPDATE语句更新变长数组数据
     DELETE FROM dept_varray--删除记录同时删除变长数组数据
           WHERE deptno = 30;
END;