首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将execute immediate中的数据放入pl/sql块中

将execute immediate中的数据放入pl/sql块中
EN

Stack Overflow用户
提问于 2014-03-14 21:32:21
回答 2查看 4.8K关注 0票数 1

在pl/sql中执行immediate中的假脱机数据。

下面是代码。

代码语言:javascript
复制
    DECLARE
     from_dt varchar(300):=&from_date;
     to_dt varchar2(300):=&to_date;
    account varchar2(200):=&account;
    mbl_table varchar2(100);
    dn_table varchar2(100);
    id number;
    Begin

    select aid into id from account where upper(acode)=upper(account);
    select tablename into mbl_table from partner_mbl where pid in (select pid from account where upper(acode)=upper(account));
    select dn_tablename into dn_table from partner_mbl where pid in (select pid from account where upper(acode)=upper(account));
    dbms_output.put_line(mbl_table);
    FOR i IN (select 'p_'||to_char((ROWNUM-1 + to_date(from_dt, 'ddmonyyyy')),'ddmonyyyy') part FROM all_objects
     WHERE ROWNUM-2 < to_date(to_dt, 'ddmonyyyy')-to_date(from_dt, 'ddmonyyyy'))loop

 execute immediate 'Select a.pcode,A.Acode,To_Char(A.Mobile),a.msg,a.senderid,To_Char(A.Rts,'||'''dd/mm/yyyy hh24:mi:ss'''||'),To_Char(A.Sts,'||'''dd/mm/yyyy hh24:mi:ss'''||'),A.Statusflag,A.Statusid,To_Char(B.Lastts,'||'''dd/mm/yyyy hh24:mi:ss'''||'),B.Statusflag,B.Err_Des From '|| mbl_table ||' partition('||i.part||') A, '|| dn_table ||' partition('||i.part||') B Where a.aid='||id|| ' And A.Msgid = B.Msgid(+)';

end loop;
    End;

如何将execute immediate的输出假脱机为csv文件

EN

回答 2

Stack Overflow用户

发布于 2014-03-19 05:51:28

代码语言:javascript
复制
DECLARE
  from_dt   varchar(300) := &from_date;
  to_dt     varchar2(300) := &to_date;
  account   varchar2(200) := &account;
  mbl_table varchar2(100);
  dn_table  varchar2(100);
  id        number;
  /*define types*/ 
  /* change the next varchar2(1000) with your types*/
  t_pcode IS TABLE OF varchar2(1000);
  v_pcode t_pcode;

  t_Acode IS TABLE OF varchar2(1000);
  v_Acode t_Acode;

  t_Mobile IS TABLE OF varchar2(1000);
  v_Mobile t_Mobile;

  t_msg IS TABLE OF varchar2(1000);
  v_msg t_msg;

  t_senderid IS TABLE OF varchar2(1000);
  v_senderid t_senderid;

  t_Rts IS TABLE OF varchar2(1000);
  v_Rts t_Rts;

  t_Sts IS TABLE OF varchar2(1000);
  V_Sts t_Sts;

  t_Statusflag IS TABLE OF varchar2(1000);
  v_Statusflag t_Statusflag;

  t_Statusid IS TABLE OF varchar2(1000);
  v_Statusid t_Statusid;

  t_Lastts IS TABLE OF varchar2(1000);
  v_Lastts t_Lastts;

  t_Statusflag IS TABLE OF varchar2(1000);
  v_Statusflag t_Statusflag;

  t_Err_Des IS TABLE OF varchar2(1000);
  v_Err_Des t_Err_Des;
  /*end types*/
Begin

  select aid into id from account where upper(acode) = upper(account);
  select tablename
    into mbl_table
    from partner_mbl
   where pid in
         (select pid from account where upper(acode) = upper(account));
  select dn_tablename
    into dn_table
    from partner_mbl
   where pid in
         (select pid from account where upper(acode) = upper(account));
  dbms_output.put_line(mbl_table);
  FOR i IN (select 'p_' ||
                   to_char((ROWNUM - 1 + to_date(from_dt, 'ddmonyyyy')),
                           'ddmonyyyy') part
              FROM all_objects
             WHERE ROWNUM - 2 < to_date(to_dt, 'ddmonyyyy') -
                   to_date(from_dt, 'ddmonyyyy')) loop

    /*    execute immediate 'Select a.pcode,A.Acode,To_Char(A.Mobile),a.msg,a.senderid,To_Char(A.Rts,' ||
                          '''dd/mm/yyyy hh24:mi:ss''' || '),To_Char(A.Sts,' ||
                          '''dd/mm/yyyy hh24:mi:ss''' ||
                          '),A.Statusflag,A.Statusid,To_Char(B.Lastts,' ||
                          '''dd/mm/yyyy hh24:mi:ss''' ||
                          '),B.Statusflag,B.Err_Des From ' || mbl_table ||
                          ' partition(' || i.part || ') A, ' || dn_table ||
                          ' partition(' || i.part || ') B Where a.aid=' || id ||
                          ' And A.Msgid = B.Msgid(+)' ;
    */
    execute immediate 'Select a.pcode,A.Acode,To_Char(A.Mobile),a.msg,a.senderid,To_Char(A.Rts,' ||
                      '''dd/mm/yyyy hh24:mi:ss''' || '),To_Char(A.Sts,' ||
                      '''dd/mm/yyyy hh24:mi:ss''' ||
                      '),A.Statusflag,A.Statusid,To_Char(B.Lastts,' ||
                      '''dd/mm/yyyy hh24:mi:ss''' ||
                      '),B.Statusflag,B.Err_Des From ' || mbl_table ||
                      ' partition(' || i.part || ') A, ' || dn_table ||
                      ' partition(' || i.part || ') B Where a.aid=' || id ||
                      ' And A.Msgid = B.Msgid(+)' 
    BULK COLLECT INTO v_pcode, v_Acode, v_Mobile, v_msg, v_senderid, 
           v_Rts, V_Sts, v_Statusflag, v_Statusid, v_Lastts, 
           v_Statusflag, v_Err_Des;
    for i.. v_pcode.count loop
      dbms_output.put_line('pcode and msg values are: '||v_pcode(i)||' ' ||v_msg(i) ||' at line' || i );
      /*you can get out other values with same way*/
    end loop;

End;
票数 2
EN

Stack Overflow用户

发布于 2014-03-19 06:01:53

您还可以查看oracle文档中有关"oracle集合“、”立即执行“、”批量收集“的信息。

我之前的帖子可以解决你的问题,但这里有一个简单的例子作为补充信息。

代码语言:javascript
复制
DECLARE
  TYPE emp_typ IS TABLE OF scott.emp%ROWTYPE;
  e_tab     emp_typ;

BEGIN
  EXECUTE IMMEDIATE 'SELECT * FROM emp'
  BULK COLLECT INTO e_tab;

  DBMS_OUTPUT.put_line('Dynamic EXECUTE: ' || e_tab.count);
  for i in 1..e_tab.count loop
      DBMS_OUTPUT.put_line( e_tab(i).ename ||':'|| e_tab(i).empno );
      null;
  end loop;
END;
/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22406457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档