Dynamic Oracle Pivot_In_Clause Dynamic Oracle Pivot_In_Clause oracle oracle

Dynamic Oracle Pivot_In_Clause


You can build dynamic query in your script,look at this example:

variable rr refcursordeclare   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 200SET LINESIZE 16000print :rr

Here is the result (only small fragment, because it is very wide and long)

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