oracle 中存储过程一些小应用

1.for ,loop ,while 的应用

/*------------------------------for----------------------------------------------*/
  procedure TEST_FOR is
    N_VALUE        integer;
    N_VALUE_RESULT integer;
  begin
    ---- 1..10之和
    N_VALUE_RESULT := 0;
    for N_VALUE in 1 .. 10 loop
      select N_VALUE + N_VALUE_RESULT into N_VALUE_RESULT from dual;
    end loop;
    pbidebug.UP_SQLSTATEMENT(N_VALUE_RESULT); --打印记录
  end TEST_FOR;
/*---------------------------------------LOOP---------------------------------------------*/
  procedure TEST_LOOP is
    N_VALUE        integer;
    N_VALUE_RESULT integer;
  begin
  
    N_VALUE_RESULT := 0;
    N_VALUE        := 0;
    loop
    
      select N_VALUE + N_VALUE_RESULT into N_VALUE_RESULT from dual;
      N_VALUE := N_VALUE + 1;
    
      if N_VALUE > 10 then
        exit;
      end if;
    
    end loop;
    pbidebug.UP_SQLSTATEMENT(N_VALUE_RESULT); --打印记录
  end TEST_LOOP;
/*----------------------------while----------------------------------------------*/
  procedure TEST_WHILE is
    N_VALUE        integer;
    N_VALUE_RESULT integer;
  begin
  
    N_VALUE_RESULT := 0;
    N_VALUE        := 0;
    while N_VALUE <= 10 loop
    
      select N_VALUE + N_VALUE_RESULT into N_VALUE_RESULT from dual;
      N_VALUE := N_VALUE + 1;
    
    end loop;
    pbidebug.UP_SQLSTATEMENT(N_VALUE_RESULT); --打印记录
  end TEST_WHILE;
/*--------------------------------for 逐行数据处理------------------------------------------*/

  procedure TEST_FOR_1 is
    V_STRTEMP varchar2(30000);
  begin
    
    for www in (select varno from tam_unitinfo) loop
      V_STRTEMP := V_STRTEMP || www.varno ||';';
    end loop;
    pbidebug.UP_SQLSTATEMENT(V_STRTEMP); --打印记录
  end TEST_FOR_1;
/*-------------------------------------------------------------------------------------------*/

2.insert into 使用

 /*----------------------------------insert into----------------------------------------------*/

  procedure TEST_INSETINTO_1 is
    V_STRSQL       VARCHAR2(30000);
    STRSQLINSERT1  VARCHAR2(3000);
    STRSQLINSERT2  VARCHAR2(3000);
    STRSQLINSERT3  VARCHAR2(3000);
    STRSQLINSERT4  VARCHAR2(3000);
    STRSQLINSERT5  VARCHAR2(3000);
    STRSQLINSERT6  VARCHAR2(3000);
    STRSQLINSERT7  VARCHAR2(3000);
    STRSQLINSERT8  VARCHAR2(3000);
    STRSQLINSERT9  VARCHAR2(3000);
    STRSQLINSERT10 VARCHAR2(3000);
    STRSQLINSERT11 VARCHAR2(3000);
  begin
    ---select 为空报错
    V_STRSQL := ' insert into TGL_4AVIEW_DETAILS_FOR4A ' ||
                ' (VARNO, vardescription, PERIODNAME, dtaccountdate, costpoolvarno, costpooltvarname, bank, deptvarno, deptvarname, varabstract, money) ' ||
                ' select ww.varno,ww.vardescription, ww.varname ,ww.dtaccountdate,acc4a.costpoolvarno,acc4a.costpooltvarname, ' ||
                ' cost4a.deptvarno ,cost4a.deptvarname ,ww.varabstract,ww.money from XXXXX';
    EXECUTE IMMEDIATE V_STRSQL;
  
    ---select 为空不报错           
    V_STRSQL := ' insert into TGL_4AVIEW_DETAILS_FOR4A ' ||
               --  ' (VARNO, vardescription, PERIODNAME, dtaccountdate, costpoolvarno, costpooltvarname, bank, deptvarno, deptvarname, varabstract, money) '||
                ' select ww.varno,ww.vardescription, ww.varname ,ww.dtaccountdate,acc4a.costpoolvarno,acc4a.costpooltvarname, ' ||
                ' cost4a.deptvarno ,cost4a.deptvarname ,ww.varabstract,ww.money from XXXXX';
    EXECUTE IMMEDIATE V_STRSQL;
  
    ----insert into表从外部传递变量           
    V_STRSQL := ' INSERT INTO TBI_DEBUG_SQL(SQL1,SQL2,SQL3,SQL4,SQL5,SQL6,SQL7,SQL8,SQL9,SQL10,SQL11,LOGDATE)' ||
                ' VALUES(:V1,:V2,:V3,:V4,:V5,:V6,:V7,:V8,:V9,:V10,:V11,:V12)';
    EXECUTE IMMEDIATE V_STRSQL
      USING STRSQLINSERT1, STRSQLINSERT2, STRSQLINSERT3, STRSQLINSERT4, STRSQLINSERT5, STRSQLINSERT6, STRSQLINSERT7, STRSQLINSERT8, STRSQLINSERT9, STRSQLINSERT10, STRSQLINSERT11, SYSDATE();
  
    ----insert into表从外部传递变量                 
    -----(1)
    V_STRSQL := ' insert into aaa_zw  (varno1, varno2, varno3, varno4, varno5) ' ||
                '  values (101, 1, 2, 3, 4);';
    EXECUTE IMMEDIATE V_STRSQL;
    -----(2)
    V_STRSQL := ' insert into aaa_zw  (varno1, varno2, varno3) ' ||
                '  values (102, 1, 2);';
    EXECUTE IMMEDIATE V_STRSQL;
    -----(3)
    V_STRSQL := ' insert into aaa_zw  (varno1, varno2, varno4) ' ||
                '  values (103, 1, 2);';
    EXECUTE IMMEDIATE V_STRSQL;
  
  end TEST_INSETINTO_1;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值