【问题标题】:How to use the table names from a select Query in the from clause of another select Query in Oracle如何在 Oracle 中另一个选择查询的 from 子句中使用选择查询中的表名
【发布时间】:2012-07-04 08:53:16
【问题描述】:

我需要以下输出

  • 队列名称:队列名称
  • 状态:0 就绪,1 等待,2 已处理,3 已过期 - 队列表
  • 计数:统计该状态的队列表中的记录数。

例子

Queue Name         State         Count
---------------------------------------
Email_Q            Processed      5939
Email_response_Q   Waiting         133

我构造了以下SQL

SELECT 'select ''' || owner || '.' || name || ''' queue_name, 
        decode(state,0,''Ready'',1,''Waiting'',2,''Processed'',3,''Expired'',''?'') state, 
        count(*) count 
        from ' || owner || '.' || queue_table || 
        ' where q_name = ''' || name || ''' group by state' cmd
  FROM all_queues
 WHERE owner IN ('AMADEUS')
 ORDER BY owner, name; 

我能够为 Queue 表构建所有选择。但我想使用 select 语句获取输出。

我在考虑管道功能或使用全局临时表。 任何帮助将不胜感激。

【问题讨论】:

  • 流水线函数听起来不错,你试过了吗?

标签: oracle select


【解决方案1】:
DECLARE
   sqlStr VARCHAR2(2000);
BEGIN

   dbms_output.put_line(RPAD('queue_name',30,' ') || RPAD('State',30,' ')  || LPAD('Count',30,' ') );             
   FOR rec_ IN ( SELECT 'select ''' || OWNER || '.' || NAME ||
                        ''' queue_name,          decode(state,0,''Ready'',1,''Waiting'',2,''Processed'',3,''Expired'',''?'') state,          count(*) count          from ' ||
                        OWNER || '.' || QUEUE_TABLE || ' where q_name = ''' || NAME ||
                        ''' group by state' CMD
                 FROM ALL_QUEUES
                 WHERE OWNER IN ('AMADEUS')
                 ORDER BY OWNER, NAME               
               ) LOOP
      sqlStr := 'BEGIN
                    FOR rec_ IN (' || rec_.cmd ||
                                 ') LOOP
                       dbms_output.put_line( RPAD(rec_.queue_name,30,'' '') || RPAD(rec_.State,30,'' '')  || LPAD(rec_.Count,30,'' '') );   
                    END LOOP;
                 END;';
      EXECUTE IMMEDIATE sqlStr ;
   END LOOP;   
END;                            

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2021-10-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多