Advertisement
guthypeter

Untitled

Mar 31st, 2015
2,139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 1.79 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION      fetch_schema_metadata(in_owner IN varchar2,
  2.   in_name_filter IN varchar2 DEFAULT '%')
  3.   RETURN CLOB
  4.   authid CURRENT_USER
  5. IS
  6.   dmh NUMBER;
  7.   ddltext CLOB;
  8.   TYPE ott IS varray(9) OF varchar2(32);
  9.   ots ott := ott('table', 'view', 'package', 'type','sequence_disabled', 'materialized view', 'index', 'procedure', 'trigger');
  10. BEGIN
  11.   dbms_lob.createtemporary(ddltext, TRUE);
  12.   dmh := dbms_metadata.OPEN('TABLE');
  13.   dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'STORAGE', FALSE);
  14.   dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'TABLESPACE', FALSE);
  15.   dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'PRETTY', TRUE);
  16.   dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', TRUE);
  17.   dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'FORCE', FALSE);
  18.   dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'CONSTRAINTS_AS_ALTER', TRUE);
  19.   dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);
  20.  
  21.   FOR ot IN ots.FIRST..ots.LAST
  22.   loop
  23.     FOR t IN (
  24.       SELECT object_name
  25.       FROM all_objects
  26.       WHERE LOWER(owner)=LOWER(in_owner)
  27.         AND LOWER(object_name) LIKE LOWER(in_name_filter)
  28.         AND LOWER(object_type) = LOWER(ots(ot))
  29.       ORDER BY object_name
  30.       )
  31.     loop
  32.       BEGIN
  33.         dbms_lob.append(ddltext,
  34.           dbms_metadata.get_ddl(
  35.             object_type=>REPLACE(UPPER(ots(ot)), ' ', '_'),
  36.             name=>UPPER(t.object_name),
  37.             schema=>UPPER(in_owner)
  38.           )
  39.         );
  40.       exception WHEN others THEN
  41.         dbms_lob.append(ddltext, sqlerrm);
  42.       END;
  43.     END loop;
  44.   END loop;
  45.   dbms_metadata.close(dmh);
  46.   RETURN ddltext;  
  47. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement