微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

plsql块获取动态sql查询结果

如何解决plsql块获取动态sql查询结果

对我来说,欧文想要达到的目标还不清楚:

@Irveen,为什么不包含105条记录的表?每周您都会删除一条记录,并添加另一条记录。您将永远不会更改您的查询

另一种解决方案是转移数据,因此您将第2列的数据放入1、3放入2、2、4放入3,…,103放入102。您将不必添加列或删除列。

解决方法

我们创建了以下匿名块...........

DECLARE
   sql_str long(32000);
   where_str long(32000);
   counter NUMBER(3):=0;
   BEGIN
   sql_str:='SELECT '||' A.bio_id,';
   where_str:=' where '||'A.bio_id=B.bio_id AND'||' A.bio_id<>0 and rownum<25 AND (' ;
   LOOP
   counter:=counter+1;
  sql_str:=sql_str||'decode(A.wk_units'||(counter+1)||' - B.wk_units'|| (counter)||',NULL,A.wk_units'||(counter+1)||')';
 sql_str:=sql_str||',decode(A.wk_units'||(counter+1)||' - B.wk_units'|| (counter)||',B.wk_units'||(counter)||')' ;
  where_str:=where_str||' A.wk_units'||(counter+1)||'<> B.wk_units'||(counter) ;
  EXIT WHEN counter=5;
  sql_str:=sql_str||',';
  where_str:=where_str||' or ';
  END LOOP;
  sql_str:=sql_str||' from cnt_sls_dm.fct_sales_summary A,cnt_sls_dm.fct_sales_summary B';
  sql_str:=sql_str||where_str||')';
  dbms_output.put_line(sql_str);
  EXECUTE IMMEDIATE(sql_str);
  END;

所需结果:我们编写了一个动态sql查询。它应该获得选择查询的结果集。但是我们在运行此块时得到查询本身。而不是获得此查询的任何结果。

让我们知道我们是否在礼仪轨道上。或者我们需要做其他事情才能得出结果。

结果是

SQL> /
SELECT  A.bio_id,decode(A.wk_units2 - B.wk_units1,A.wk_units2),B.wk_units1),decode(A.wk_units3 -
B.wk_units2,A.wk_units3),B.wk_units2),decode(A.wk_units4 -
B.wk_units3,A.wk_units4),B.wk_units3),decode(A.wk_units5 -
B.wk_units4,A.wk_units5),B.wk_units4),decode(A.wk_units6 -
B.wk_units5,A.wk_units6),B.wk_units5) from cnt_sls_dm.fct_sales_summary A,cnt_sls_dm.fct_sales_summary B where A.bio_id=B.bio_id AND A.bio_id<>0 and
rownum<25 AND ( A.wk_units2<> B.wk_units1 or  A.wk_units3<> B.wk_units2 or
A.wk_units4<> B.wk_units3 or  A.wk_units5<> B.wk_units4 or  A.wk_units6<>
B.wk_units5)

PL/SQL procedure successfully completed.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。