Oracle 10g中的动态SQL查询

下午所有,Oracle 10g中的动态SQL查询

我是Oracle和SQL的新手,但是我已经创建了下面的代码。我目前正在使用Oracle 10g。我只是想知道是否有人可以帮助我使这个代码动态而不是硬编码。

代码我只是看着一个记录用户活动的表。然后,我基本计算每个用户/ PC的记录数,并将其显示在一个透视样式表中。

这不是一个非常困难的查询,但我可以有大约30个左右的PC,我需要输入这个硬编码的方法并不是完成这个任务的最好方法。

我一直在网上搜索,看看我可以使用基于主机名或user_ID的动态声明,但我还没有设法找到任何简单地循环访问我的数据,然后生成这个枢纽式样视图。

我一直在看'光标',但即时通讯认为即时通过远射。

蚂蚁的帮助是提前很多appriechiated。

问候 贝蒂

SELECT USER_ID, 

SUM(CASE WHEN host LIKE 'PC1' THEN 1 ELSE 0 END) AS PC1,

SUM(CASE WHEN host LIKE 'PC2' THEN 1 ELSE 0 END) AS PC2,

SUM(CASE WHEN host LIKE 'PC3' THEN 1 ELSE 0 END) AS PC3,

SUM(CASE WHEN host IS NOT NULL THEN 1 ELSE 0 END) AS grand_total

FROM table_Name

GROUP BY USER_ID

回答:

当你问一个oracle问题要注意释放是很重要的。在你的情况 - 如果你有11g,你可以看看pivot函数。

在10G(和在11g),你可以不管你是用你要查询的不同值的枢轴或动态SQL尝试类似的东西

create or replace function get_pivot() 

return sys_refcursor

as

stmt varchar2(32000);

c sys_Refcursor;

cursor c_values as

select distinct host from table_name;

begin

stmt := 'select user_id , ';

for x in c_values loop

stmt := stmt || ' sum(case when host = '''||x.host||''' then 1 else 0 end) as ' ||host|| ',';

end loop;

stmt := stmt || ' count(host) as grand_total from table_name group by user_id';

open c for stmt;

return(c);

end get_pivot;

没有测试过 - 我目前没有我的预言。

以上是 Oracle 10g中的动态SQL查询 的全部内容, 来源链接: utcz.com/qa/266157.html

回到顶部