1. 生成sql腳本,SQL plus執行,類型名稱、用戶名需大寫
SET PAGESIZE 0
SET TRIMSPOOL ON
SET LINESIZE 10000
SET LONG 90000
SET FEEDBACK OFF
SET FEED OFF
SET ECHO OFF
-- 指定文件路徑,文件夾不能為空
SPOOL E:\ytzz\copy\czbdc_dp\schema_bdc_workflow.sql
SELECT CASE
WHEN U.OBJECT_TYPE IN ('PROCEDURE', 'FUNCTION' , 'PACKAGE', 'TRIGGER') THEN
DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.OBJECT_NAME, U.OWNER) ||
CHR(10) || '/'
ELSE
DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.OBJECT_NAME, U.OWNER)||
CHR(10) || ';'
END AS SCOTT_DDL
FROM DBA_OBJECTS U
WHERE U.OBJECT_TYPE IN ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'TRIGGER')
AND U.OWNER='TEST';
SPOOL OFF;
ps:
--去掉表的存儲參數(例如,INITIAL、NEXT、FREELISTS等參數),那么可以使用DBMS_METADATA包中的函數SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE)來完成
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE);
2. 查詢
-- 根據用戶對象名和對象類型,查找對面內容 存儲過程、函數、觸發器 -- PROCEDURE TRIGGER FUNCTION PACKAGE
SELECT DBMS_METADATA.GET_DDL('PROCEDURE', U.OBJECT_NAME,'BDCK')
-- 任意用戶登錄都可以
from dba_objects U
where u.OBJECT_TYPE in ('PROCEDURE') and u.owner = 'BDCK'
;
--查觸發器內容 -- PROCEDURE TRIGGER FUNCTION
SELECT DBMS_METADATA.GET_DDL('PROCEDURE', U.OBJECT_NAME)
-- 當前登錄用戶
FROM USER_OBJECTS U
WHERE OBJECT_TYPE = 'FUNCTION'
;
函數使用參數說明
SQL> DESC DBMS_METADATA.GET_DDL
PARAMETER TYPE MODE DEFAULT?
----------- -------- ---- --------
(RESULT) CLOB
OBJECT_TYPE VARCHAR2 IN
NAME VARCHAR2 IN
SCHEMA VARCHAR2 IN Y
VERSION VARCHAR2 IN Y
MODEL VARCHAR2 IN Y
TRANSFORM VARCHAR2 IN Y
補充 把clob轉換為字符串
SELECT dbms_lob.substr(DBMS_METADATA.GET_DDL('FUNCTION', 'FUNC_NAME', 'SCHEMA')) as 內容 FROM dual;