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