当前位置: 代码迷 >> Oracle开发 >> 字段的动态执行解决思路
  详细解决方案

字段的动态执行解决思路

热度:83   发布时间:2016-04-24 06:39:07.0
字段的动态执行
select  count(*)/2480   from   dm_inpatient   where  xx1!='-9999'

        表dm_inpatient有178个像xx1这样的字段,上述语句需要变化的只有字段名(如 xx1!='-9999', xx2!='-9999',......),我将这178个字段的名称存到了表dm_temp中。我希望可以通过一个过程自动的实现上述功能,而不是将上述语句执行178遍。
       请问各位大神有什么好办法,拜谢!
------解决方案--------------------
利用EXECUTE IMMEDIATE
------解决方案--------------------
引用:
select  count(*)/2480   from   dm_inpatient   where  xx1!='-9999'

        表dm_inpatient有178个像xx1这样的字段,上述语句需要变化的只有字段名(如 xx1!='-9999', xx2!='-9999',......),我将这178个字段的名称存到了表dm_temp中。我希望可以通过一个过程自动的实现上述功能,而不是将上述语句执行178遍。
       请问各位大神有什么好办法,拜谢!

动态SQL拼接SQL语句,然后利用EXECUTE IMMEDIATE 执行,你可以通过procedure或者匿名程序来实现
------解决方案--------------------
没看很明白  触发器可以嘛
------解决方案--------------------
引用:
 



create or replace procedure selectx(mail_file varchar2) as
  m number;
begin
  execute immediate 'select count(*) from dm_inpatient where ' 
------解决方案--------------------
 mail_file 
------解决方案--------------------

                    '=''-9999''' --此处一定要注意,你传入的mail_file值一定要是dm_inpatient的一个字段,否则会报错
    into m;
  insert into dm_temp values (mail_file, m);
  commit;
end selectx;

declare
begin
  for c1 in (select mail_file from yy) loop
    selectx(c1.mail_file);
  end loop;
end;

  相关解决方案