zoukankan      html  css  js  c++  java
  • 返回表对象的方法之一--bulk collect into

    1.创建表对象的类型(oracle Types类目录下)

    create or replace type obj_table1 as object
    (
    xzq nvarchar2(19),
    mj number(38,8),
    gjzrd number(5),
    gjlyd number(5),
    gjjjd number(5)
    )

    2.创建虚拟表 (oracle Types类目录下)

    create or replace type t_table1 is table of obj_table1

    3.创建oracle函数

    create or replace function GDZL_XJFDDY_FX(ksnd integer,jsnd integer)
    return t_table1
    is
    v_test T_TABLE1 := T_TABLE1();
    flag varchar2(50);
    flag1 varchar2(50);
    d integer:=ksnd-1;
    cout varchar2(2000);
    cout1 integer;
    cmd varchar2(4000);
    xxc varchar2(50);
    xxl varchar2(50);
    xxxl varchar2(50);
    xxxxc varchar2(50);
    cmd_sql varchar(4000);
    begin
    if ksnd is null or jsnd is null then
    return v_test;
    end if;
    xxc:='XJFDDY33';
    xxxxc:='XJLXFDDY33';

    loop
    <<here>>
    d:=d+1;
    if d>jsnd then
    exit;
    end if;
    xxl:=xxc||d;
    xxxl:=xxxxc||d;
    cmd:='select count(1) from all_all_tables t where t.owner=''SDE'' and t.table_name='''||xxl||'''';
    execute immediate cmd into cout;
    cmd:='select count(1) from all_all_tables t where t.owner=''SDE'' and t.table_name='''||xxxl||'''';
    execute immediate cmd into cout1;

    if cout>0 and cout1>0 then
    flag:='SDE.'||xxl||' t where 1=1';
    flag1:='SDE.'||xxxl||' t where 1=1';
    else
    goto here;
    end if;
    cmd:='select xzq,mj,gjzrd,gjlyd,gjjjd from (select substr(t.dybh,1,6) as xzq,round(sum(nvl(t.tbdlmj,0))/10000,2) as mj,t.gjzrd,t.gjlyd,t.gjjjd
    from '||flag||' group by t.dlmc,substr(t.dybh,1,6),t.gjzrd,t.gjlyd,t.gjjjd
    union all
    select substr(t.dybh,1,6) as xzq,round(sum(nvl(t.mj,0))/10000,2) as mj,t.gjzrd,t.gjlyd,t.gjjjd
    from '||flag1||' group by substr(t.dybh,1,6),t.gjzrd,t.gjlyd,t.gjjjd )';
    if cmd_sql is null then
    cmd_sql:=cmd;
    else
    cmd_sql:=cmd||' union all '||cmd_sql;
    end if;
    end loop;
    if cmd_sql is not null then
    EXECUTE IMMEDIATE 'select OBJ_TABLE1(xzq,mj,gjzrd,gjlyd,gjjjd) from ('||cmd_sql||')' bulk collect into v_test;
    end if;
    return v_test ;
    end GDZL_XJFDDY_FX;

  • 相关阅读:
    UML学习——用例图(二)
    servlet相关生命周期(二)
    UML 学习——UML概述(一)
    servlet概述(一)
    java 核心编程——线程之线程控制(五)
    java 核心编程——线程之线程池(ExecutorService)(四)
    java 核心编程——线程之线程组(四)
    java 核心编程——线程之定时器(TimerTask)(三)
    java 核心编程——线程之线程的开发方法(二)
    java 核心编程——线程之线程的基本概念(一)
  • 原文地址:https://www.cnblogs.com/huodige/p/8967838.html
Copyright © 2011-2022 走看看