[英]Dynamic SQL Query in Oracle 10g
下午全部
我是Oracle和SQL的新手,但是我使用以下已创建的代码进行查询。 我目前正在使用Oracle 10g。 我只是想知道是否有人可以帮助我使此代码动态化,而不是硬编码。
我所拥有的代码只是看一个记录用户活动的表。 然后,我实质上计算了每个用户/ PC拥有的记录数,并将其显示在数据透视表中。
这样的查询不是很困难,但是我可能需要输入大约30台PC,这种硬编码方法绝对不是完成此任务的最佳方法。
我一直在互联网上搜索以查看基于主机名或user_ID可以使用的动态语句,但是我没有找到任何简单地遍历我的数据然后生成此piviot样式视图的内容。
我一直在看'Cursors',但我认为我远未实现。
事先需要蚂蚁帮助。
问候贝蒂
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问题时,请务必注意发行版。 在您的情况下-如果您有11克,则可以查看pivot
功能。
在10G(和11g)中,您可以尝试类似的操作
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;
无论您是使用数据透视还是动态SQL,都必须查询不同的值。
Havent已对其进行了测试-目前我没有甲骨文。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.