sql >> データベース >  >> RDS >> Oracle

動的OraclePivot_In_Clause

    スクリプトで動的クエリを作成できます。次の例を見てください:

    variable rr refcursor
    
    declare 
      bb varchar2(4000);
      cc varchar2( 30000 );
    begin 
        WITH PIVOT_DATA AS (
             SELECT *
             FROM
             (
                 SELECT USERNAME, GRANTED_ROLE
                 FROM DBA_USERS U LEFT OUTER JOIN DBA_ROLE_PRIVS R
                 ON U.USERNAME = R.GRANTEE
              )
        )
        select ''''|| listagg( granted_role, ''',''' ) 
                within group( order by granted_role ) || '''' as x 
        into bb
        from (
          select distinct granted_role from pivot_data
        )
        ;
    
        cc := q'[
        WITH PIVOT_DATA AS (
             SELECT *
             FROM
             (
                 SELECT USERNAME, GRANTED_ROLE
                 FROM DBA_USERS U LEFT OUTER JOIN DBA_ROLE_PRIVS R
                 ON U.USERNAME = R.GRANTEE
              )
        )
        SELECT *
        FROM PIVOT_DATA
        PIVOT
        (
            COUNT(GRANTED_ROLE)
            FOR GRANTED_ROLE
            IN(]'  || bb || q'[) -- Just an example
        )
        ORDER BY USERNAME ASC]';
    
        open :rr for cc;
    end;
    /
    
    SET PAGESIZE 200
    SET LINESIZE 16000
    print :rr
    

    結果は次のとおりです(非常に幅が広​​く長いため、小さなフラグメントのみ)

    -----------------------------------------------------------------------------------------------------------------------------------
        USERNAME                       'ADM_PARALLEL_EXECUTE_TASK' 'APEX_ADMINISTRATOR_ROLE' 'AQ_ADMINISTRATOR_ROLE' 'AQ_USER_ROLE'        
        ------------------------------ --------------------------- ------------------------- ----------------------- ----------------------
        ANONYMOUS                      0                           0                         0                       0          
        APEX_030200                    0                           0                         0                       0        
        APEX_PUBLIC_USER               0                           0                         0                       0    
        APPQOSSYS                      0                           0                         0                       0   
    ..............
        IX                             0                           0                         1                       1  
        OWBSYS                         0                           0                         1                       1      
    



    1. バックグラウンドプロセス

    2. MySQLで重複レコードを見つける方法

    3. Laravel:データベースに動的に接続する

    4. 会議を最大限に活用するための7つの戦略