SET LINESIZE 200

SET PAGESIZE 50000


COLUMN column_name FORMAT A30

COLUMN data_type FORMAT A30


SELECT 

  column_name, 

  data_type || 

    (CASE 

      WHEN data_type IN ('VARCHAR2', 'CHAR', 'NVARCHAR2', 'NCHAR') THEN '(' || data_length || ')'

      WHEN data_type IN ('NUMBER') THEN

        (CASE

          WHEN data_precision IS NOT NULL AND data_scale IS NOT NULL THEN '(' || data_precision || ',' || data_scale || ')'

          WHEN data_precision IS NOT NULL AND data_scale IS NULL THEN '(' || data_precision || ')'

          ELSE ''

        END)

      ELSE ''

    END) AS data_type

FROM 

  all_tab_columns

WHERE 

  owner = UPPER('your_schema_name') AND

  table_name = UPPER('your_table_name')

ORDER BY 

  column_id;


SET SERVEROUTPUT ON


DECLARE

  v_owner VARCHAR2(100);

BEGIN

  FOR cur IN (SELECT username FROM all_users WHERE username NOT IN ('SYS', 'SYSTEM'))

  LOOP

    v_owner := cur.username;


    -- Output schema name

    DBMS_OUTPUT.PUT_LINE('Schema: ' || v_owner);


    -- Retrieve table information

    FOR tbl IN (SELECT table_name FROM all_tables WHERE owner = v_owner)

    LOOP

      -- Output table name

      DBMS_OUTPUT.PUT_LINE('Table: ' || tbl.table_name);


      -- Output column headers

      DBMS_OUTPUT.PUT_LINE('Column Name' || CHR(9) || 'Data Type');


      -- Retrieve column information

      FOR col IN (SELECT column_name, data_type FROM all_tab_columns WHERE owner = v_owner AND table_name = tbl.table_name)

      LOOP

        -- Output column information

        DBMS_OUTPUT.PUT_LINE(col.column_name || CHR(9) || col.data_type);

      END LOOP;


      -- Output object privileges

      DBMS_OUTPUT.PUT_LINE('Object Privileges:');

      FOR priv IN (SELECT privilege FROM all_tab_privs WHERE owner = v_owner AND table_name = tbl.table_name)

      LOOP

        -- Output privilege information

        DBMS_OUTPUT.PUT_LINE('- ' || priv.privilege);

      END LOOP;


      -- Output column privileges

      DBMS_OUTPUT.PUT_LINE('Column Privileges:');

      FOR col_priv IN (SELECT grantee, privilege, column_name FROM all_col_privs WHERE owner = v_owner AND table_name = tbl.table_name)

      LOOP

        -- Output column privilege information

        DBMS_OUTPUT.PUT_LINE('- Grantee=' || col_priv.grantee || ', Privilege=' || col_priv.privilege || ', Column=' || col_priv.column_name);

      END LOOP;


      DBMS_OUTPUT.PUT_LINE('');

    END LOOP;


    DBMS_OUTPUT.PUT_LINE('');

  END LOOP;

END;

/