zoukankan      html  css  js  c++  java
  • 复合类型

    一、复合类型---索引表
    定义格式: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;

  • 相关阅读:
    可能用到的两款Linux工具tmux和tpp
    CCF技术动态第68期(云计算专题)...中国云计算发展概况与趋势...
    产生随机数//NULL大写,rand()在cstdlib,不在cmath
    28个Unix/Linux的命令行神器
    oAuth无痛入门指南
    CRM 客户关系管理和云计算...Salesforce企业级云计算的领导者...
    博客终于开通了
    传递与引用
    Java基础概念
    final、finally和finalize(二)
  • 原文地址:https://www.cnblogs.com/HondaHsu/p/1330120.html
Copyright © 2011-2022 走看看