ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 动态sql查询结果多行的处理情况

动态sql查询结果多行的处理情况

原创 Linux操作系统 作者:lihy114 时间:2013-09-29 13:53:51 0 删除 编辑

CREATE OR REPLACE PROCEDURE DATACODE
IS
  cursor cur_table is select table_name from tab_name;
  v_tablename varchar2(20);
  v_count number(5);
  v_sql varchar2(1000);
  no_table exception;   --定义一个异常
  pragma exception_init(no_table,-00942);   --查询中如果表不存在,oracle报的错误
begin
  select count(*) into v_count from tab_name;
  open cur_table;
  fetch cur_table into v_tablename;
     for i in 1..v_count loop
         v_sql :='insert into remark SELECT A.ID "ID",A.MC "名称",A.COMP "单位代号",C.NAME "单位",'''||v_tablename||''' FROM '||v_tablename||' A,
    (SELECT COMPID FROM COMPANYINFO
      CONNECT BY PRIOR COMPID=PCOMPID
        START WITH COMPID=(SELECT MAX(CSZ) FROM XTCS WHERE CSMC=''COMPID_XNZXTOP'')) B,
        COMPANYINFO C
     WHERE A.COMPID=B.COMPID(+) AND B.COMPID IS NULL AND A.COMPID=C.COMPID';
         begin
   execute immediate v_sql;          --对于查询的多行数据,需要建立临时表保存数据,执行sql的语句与单行查询不同
       exception
                    when no_table then
                    insert into remark values(null,null,null,null,v_tablename);     --如果表不存在的话,仅仅插入表名,其他列为空值
                    commit;
             end;
             commit;
             fetch cur_table into v_tablename;
     end loop;
  close cur_table;      
end;

在这个例子中,需要注意的是两个地方:一个是如何将变量的值插入到表中;另外一个是如果处理返回多条查询的动态sql

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28803801/viewspace-773586/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-08-08

  • 博文量
    54
  • 访问量
    151823