sql/plus复合变量之记录复合类型和索引表类型

来源:互联网 发布:网络医生咨询是真的吗 编辑:程序博客网 时间:2024/05/18 01:52


 复合变量
   用于存放多个值的变量
   复合变量必须先定义,再使用  


   1 记录复合变量
    1.1 创建记录复合变量
      1.1.1 通过自定义复合类型定义复合变量
        type 复合类型名 is record (列名1,列名2,列名3);
        变量名 复合类型名
      1.1.2 通过rowtype关键之直接创建记录复合类型变量
        变量名 表名%rowtype;
        解释:比如你需要把得到emp表中查询某一条完整的记录,这些记录包括emp表中一行数据的所有列
              就可以使用此种方式创建记录复合型数据
        备注:
              记录复合型数据只能针对单行多列数据,不能对多行数据进行操作。    

 

       
DECLARE
  --方式一
  TYPE rec IS RECORD (--声明复合类型
       v_name emp.ename%TYPE,
       v_sal emp.sal%TYPE,
       v_comm emp.comm%TYPE
  );
  rec1 rec;--定义记录复合类型变量
  --方式二
  rec2 emp%ROWTYPE;--定义基于emp表的记录复合变量
BEGIN
  --方式一测试
  SELECT emp.ename,emp.sal,emp.comm INTO rec1.v_name,rec1.v_sal,rec1.v_comm FROM emp WHERE emp.empno = 7369;
  dbms_output.put_line(rec1.v_name||':'||rec1.v_sal);
  --方式二测试
  SELECT * INTO rec2 FROM emp WHERE emp.empno = 7369;
  dbms_output.put_line(rec2.ename||':'||rec2.sal);
END;
/
   2 索引表复合变量
     别名:pl/sal表
    特点:索引下表可以为负值,元素个数不受限制,下标没有限制。元素可以不连续存在
    延伸:可以理解为javascript中的数组,长度可以变,元素不连续存在。
    1 定义索引表复合类型
      注意    定义索引表复合类型需要指定该表存放数据的类型以及索引下标的类型
      语法:type 索引表名称 is table of  索引表类型存放数据的类型 index by 索引数据类型(通常为binary_integer)
    2 备注:索引表只能针对多行单列数据进行操作。不能操作多列数据

  DECLARE
 --定义索引表复合类型
 TYPE ind IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER;
 --声明索引表变量
 inds ind;
BEGIN
 SELECT emp.ename INTO inds(1) FROM emp WHERE emp.empno = 7369;
 SELECT emp.ename INTO inds(2) FROM emp WHERE emp.empno = 7876;
 SELECT emp.ename INTO inds(10) FROM emp WHERE emp.empno = 7902;
 dbms_output.put_line(inds(1));
 dbms_output.put_line(inds(10));
 dbms_output.put_line(inds.last);--得到最后一个索引下标
END;
/   


   3 索引表复合类型和记录复合类型综合运用可以操作多行多列的数据
    要点:  定义一个索引表类型,他的存放数据类型定义为记录类型
    举例说明:type empindex is table of emp%rowtype index by binary_integer
    备注:在查询得到的多行多列数据存放到索引表变量中要注意借助bulk collect关键字
          举例:
    DECLARE
 TYPE empindex IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER;
 empind empindex;
BEGIN
 SELECT * BULK COLLECT INTO empind FROM emp WHERE emp.deptno = 20;
END;
/

 

 

 

 

原创粉丝点击