繁体   English   中英

Oracle 10g中的动态SQL查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM