2012-07-03 2 views
1

다른 선택 쿼리의 FROM 절에 SELECT 쿼리에서 테이블 이름을 사용하는 나는 다음과 같은 출력어떻게 오라클

  • 대기열 이름이 필요합니다 이름 큐
  • 주의 : 0 준비 1을 Waiting, 2 Processed, 3 Expired - 대기열 테이블
  • Count : 해당 상태의 대기열 테이블에있는 레코드 수를 센다.

    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; 

내가 대기열 테이블에 대한 모든 선택을 만들 수 있어요 건설. 그러나 select 문을 사용하여 결과를 얻고 싶습니다.

나는 파이프 라인 기능이나 전역 임시 테이블을 사용하려고 생각했다. 도움이 될 것입니다.

+1

파이프 라인 기능이 좋게 들리겠습니까? –

답변

0
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;