zoukankan      html  css  js  c++  java
  • ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解

    ORACLE中RECORD、VARRAY、TAB、IS REF CURSOR LE的使用及实例详解

     

    create or replace
    procedure PRO_RECORD_ROW_TAB_EXAMPLE
    IS
    --记录一行二列的数据
    type V_REC is RECORD(
    FACT_NO char(4),
    FACT_ODR_NO char(20)
    );
    --对变量进行实例化
    V_REC1 V_REC;
    --定义一个表示表中一行记录的变量
    v_row1 odrm%rowtype;

    ----指定是一个集合的表的数组类型,简单的来说就是一个可以存储一列多行的数据类型。
    --INDEX BY BINARY_INTEGER:指索引组织类型
    TYPE V_TAB IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
    ---实例化变量
    V_TAB1 V_TAB;

    --存储单列多行
    TYPE T_TAB_FACT_ODR_NO IS TABLE OF ODRM.FACT_ODR_NO%TYPE INDEX BY BINARY_INTEGER;
    --实例化变量
    VAR_FACT_ODR_NO T_TAB_FACT_ODR_NO;

    -- 存储多列多行和ROWTYPE结合使用
    TYPE T_TAB_ODRM IS TABLE OF ODRM%ROWTYPE INDEX BY BINARY_INTEGER ;
    --实例化变量
    var_odrm t_tab_odrm;

    -- 存储多列多行和RECORD结合使用
    TYPE T_TAB_rec IS TABLE OF v_rec INDEX BY BINARY_INTEGER ;
    --实例化变量
    var_odrm_rec T_TAB_rec;

    --数组是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。在PL/SQL中,数组数据类型是VARRAY(variable array,即可变数组
    TYPE V_VARRAY IS VARRAY(5) OF VARCHAR2(25);
    --实例化变量
    varray_1 v_varray;

    /*
    像游标cursor一样,游标变量ref cursor指向指定查询结果集当前行。游标变量显得更加灵活因为其声明并不绑定指定查询。
    其主要运用于PLSQL函数或存储过程以及其他编程语言java等程序之间作为参数传递。
    不像游标的一点,游标变量没有参数。
    游标变量具有以下属性:
    (%FOUND, %NOTFOUND, %ISOPEN, and %ROWCOUNT)
    游标变量又分为强类型strong(with a return type)和弱类型(with no return type)
    */
    ---强类型
    TYPE MYCURA IS REF CURSOR RETURN ODRM%ROWTYPE;
    --实例化变量
    ref_cur mycura;
    v_row_type odrm%rowtype;

    --强类型
    TYPE REF_CURSOR IS REF CURSOR RETURN V_REC;
    --实例化变量
    ref_cur1 ref_cursor;

    ---弱类型
    TYPE REF_CURSOR1 IS REF CURSOR ;
    --实例化变量
    ref_cur2 ref_cursor1;
    v_fact_odr_no odrm.fact_odr_no%type;

    ---游标变量 与记录配合使用
    TYPE REF_CURSOR2 IS REF CURSOR ;
    --实例化变量
    ref_cur3 ref_cursor2;


    begin
    select FACT_NO,FACT_ODR_NO into V_REC1
    from ODRM
    where rownum =1;

    select * into v_row1
    from ODRM
    where rownum =1;

    V_TAB1(-1) :='-1';
    v_tab1(1) :=' 1';

    ---BULK COLLECT :指是一个成批聚合类型,简单的来说 , 它可以存储一个多行多列存储类型,采用BULK COLLECT可以将查询结果一次性地加载到集合中。
    --采用bulkcollect可以将查询结果一次性地加载到collections中。而不是通过cursor一条一条地处理。
    select FACT_ODR_NO
    bulk collect into var_fact_odr_no
    from ODRM
    where rownum <=10;

    for X in VAR_FACT_ODR_NO.first..VAR_FACT_ODR_NO.last LOOP
    DBMS_OUTPUT.PUT_LINE(var_fact_odr_no(x));
    end loop;

    select *
    bulk collect into var_odrm
    from ODRM
    where rownum <=11;
    for X in 1..VAR_ODRM.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(VAR_odrm(x).fact_no||','||var_odrm(x).fact_odr_no);
    END LOOP;

    select fact_no,FACT_ODR_NO
    bulk collect into var_odrm_rec
    from ODRM
    where rownum <=10;

    for X in var_odrm_rec.first..var_odrm_rec.last LOOP
    DBMS_OUTPUT.PUT_LINE(VAR_FACT_ODR_NO(X));
    end loop;

    varray_1 := v_varray('1','2','3','4','5');
    dbms_output.put_line(varray_1(1) );
    VARRAY_1(5) := '500';
    dbms_output.put_line(varray_1(5));

    open ref_cur for select * from odrm where rownum <12;
    loop
    fetch ref_cur into v_row_type;
    exit when ref_cur%notfound;
    dbms_output.put_line(v_row_type.fact_no ||','||v_row_type.fact_odr_no);
    end loop;
    close ref_cur;
    --
    open ref_cur1 for select fact_no,fact_odr_no from odrm where rownum <12;
    loop
    fetch ref_cur1 into v_rec1;
    exit when ref_cur1%notfound;
    dbms_output.put_line(v_rec1.fact_odr_no || v_rec1.fact_no);
    end loop;
    close ref_cur1;

    open ref_cur2 for select fact_odr_no from odrm where rownum <12;
    loop
    fetch ref_cur2 into v_fact_odr_no;
    exit when ref_cur2%notfound;
    dbms_output.put_line(v_fact_odr_no);
    end loop;
    close ref_cur2;

    open ref_cur3 for select * from odrm where rownum <12;
    loop
    fetch ref_cur3 into v_row_type;
    exit when ref_cur3%notfound;
    dbms_output.put_line(v_row_type.fact_odr_no);
    end loop;
    close ref_cur3;

    end;

    信用生活
  • 相关阅读:
    按钮设计
    图标设计
    滤镜与通道
    路径、形状工具与选区
    类的无参方法
    类和对象
    阅读器关闭时尝试调用Read无效时的解决方法
    进入ASP .net mvc的世界
    linux命令-vim
    linux命令-分区表fstab
  • 原文地址:https://www.cnblogs.com/scwbky/p/9585494.html
Copyright © 2011-2022 走看看