表中存储的表名,根据查询出的表名查询对应的数据。

xuantian868 2015-01-23 09:57:59
表A中存储的 所有相关的业务表A1,A2,...An 。根据条件查询出了 A1,A2,...An 。想在分别统计A1,A2,...An 中符合条件的数据。怎么可以实现。
...全文
643 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenlele088 2015-03-27
  • 打赏
  • 举报
回复
只能动态sql,但是总觉得若光查count,一般不这么做
  • 打赏
  • 举报
回复
楼主假如数据表是动态涉及(你这里是存在一个表里面,所以你也不能确认到底有多少业务表)的话 , 肯定得用动态sql。
xuantian868 2015-01-23
  • 打赏
  • 举报
回复
基本实现了,用的动态sql 用union是可以实现,但A1,A2 是动态查询出来的,所以有点麻烦。。

declare
    type table_cur_type is ref cursor;
    emp_cur       table_cur_type;
    a_record    A%rowtype;
    sql_statement varchar2(200);
    v_tblName varchar2(200);
    v_num number;
    v_count number;
    v_1 varchar2(32); 
    v_2 varchar2(100); 
  begin
    v_1:='bj';
    ----查询根据条件A表中的 表名称
    sql_statement := 'select * from A where type = :1 ';
    open emp_cur for sql_statement
      
      using v_1;
     -----循环取出A表中存储的表名 再进行查询
    loop
      fetch emp_cur into a_record;
      exit when emp_cur%notfound;
      dbms_output.put_line('表名:' || a_record.tblname || ');
      ------                     
       str:='select count(id) c1 from '||a_record.tblname||' where  I_DEL<>3  ';
        execute immediate str into v_num ;
        v_count :=v_num+v_count;
        DBMS_OUTPUT.PUT_LINE(v_num); 
        
      ----  
      dbms_output.put_line('----------------');
    end loop;
    DBMS_OUTPUT.PUT_LINE('v_count:'+v_count); 
  end; 
bw555 2015-01-23
  • 打赏
  • 举报
回复
select * from(
select 'A1' AS TNAME,A1.* FROM A1
UNION ALL
select 'A2' AS TNAME,A2.* FROM A2
……
)where TNAME='你的表名' and 其他条件

select A1.* FROM A1 where '你获得的表名'<>'A1'
UNION ALL
select A2.* FROM A2 where '你获得的表名'<>'A2'
……

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧