• 复合类型


    一、复合类型---索引表
    定义格式:TYPE<表类型名>IS TABLE OF <数据类型> INDEX BY BINARY_INTEGER;
    声明表变量:<表变量名> <表类型名>;
    引用:<表变量名>(<索引变量>);
    如:1. TYPE dept_table_type             IS TABLE OF   dept%ROWTYPE      INDEX BY BINARY_INTEGER;  
        2. TYPE table_col                        IS TABLE OF    VARCHAR2(4)        INDEX BY BINARY_INTEGER;
        3. TYPE type_table_emp_empno   IS TABLE OF    EMP.EMPNO%TYPE  INDEX BY BINARY INTEGER;  
            --TABLE                                  变量类型 表示数组
            --INDEX BY BINARY INTEGER表示数组下标由整数表示

        declare
                  type type_table_emp_empno is table of emp.empno%type index by binary integer;
                  --index by binary integer表示数组下标由整数表示

                  v_empnos  type_table_emp_empno;--定义一个变量是type_table_emp_empno类型

        begin
                  v_empnos(0):=6666;--这里的0表示下标
                  v_empnos(-1):=7777;--oracle允许小标为负数
                  dbms_output.put_line(v_empnos(-1));
        end;

    二、复合类型---记录

    定义格式:type <记录类型名> is record (成员变量 成员变量类型)

    TYPE type_record_dept IS RECORD
    (deptno dept.deptno%type,
     dname  dcpt.dname%type,
     ioc        dept.ioc%type
    );
    v_temp type_record_dcpt;

    例子:

         declare
                    type type_record_dept is record
                                                        ( deptno dept.deptno%type,
                                                          dname dcpt.dname%type,
                                                          ioc dept.ioc%type
                                                        );
                     v_temp type_record_dcpt;
         begin
                     v_temp.deptno:=-50;
                     v_temp.dname:='dddd';
                     v_temp.ioc:='hj';
                     dbms_output.put_line(v_temp.dcptno||''||v_temp.dname);
         end;

         此时如果dept表增加或删除字段 维护起来麻烦可以使用
         --  %rowtype申明record变量  取得一行数据这张表的行有多少列怎么分他就怎么分
         declare
                   v_temp dept%rowtype;
         begin
                   v_temp.deptno:=-50;
                   v_temp.dname:='aaa';
                   v_temp.ioc:='hj';
                   dbms_output.put_line(v_temp.dcptno||''||v_temp.dname);

         end;

    三、    BULK COLLECT 关键字的引用
    BULK COLLECT是一个PL/SQL语句,而不是SQL语言的一部分。因此,如果想用SQL执行一个BULK COLLECT操作,我必须在一个PL/SQL块内进行操作。例如:
    DECLARE
                  TYPE UsrId_Array             IS TABLE OF NUMBER;
                  TYPE MphoneCode_Array  IS TABLE OF NUMBER;
                  vusrid UsrId_Array;
                  vmphonecode MphoneCode_Array;
       
                  type test_type is table of tf_f_usrarch_main%rowtype;
       
                  CURSOR cur_tf_f_usrarch_main   IS
                                                                   select usrid, mphonecode from tf_f_usrarch_main where rownum<10;
                  CURSOR cur_tf_f_usrarch_main1 IS
                                                                   select * from tf_f_usrarch_main where rownum<10;
        
                  temp NUMBER;
                  temp1 test_type := test_type();  ----初始化变量
    BEGIN
             OPEN  cur_tf_f_usrarch_main;
             FETCH cur_tf_f_usrarch_main BULK COLLECT INTO vusrid, vmphonecode;
                      dbms_output.put_line(to_char(vusrid.count));
             FOR temp IN 1..vusrid.count
             LOOP
                      dbms_output.put_line(vusrid(temp));
             END LOOP;
    END;

  • 相关阅读:
    JAVA类和对象
    JAVA数组
    JAVA流程控制语句
    JAVA运算符
    JAVA数据类型-整数、浮点、字符串、boolean、引用数据类型
    JAVA变量
    JAVA文档注释的三种方式
    @Transactional注解失效的场景总结
    接口幂等性
    事务的四个特性、四种隔离级别和七种传播行为
  • 原文地址:https://www.cnblogs.com/HondaHsu/p/1330120.html
Copyright © 2020-2023  润新知