oracleステップアップ(3)---dbms_metadata.get_ddlオブジェクト定義スクリプトの取得
作業中、データベースから特定のオブジェクトを取得する定義スクリプトに遭遇します.たとえば、次のようなものがあります.
PROCEDURE
PACKAGE
PACKAGE BODY
TRIGGER
FUNCTION
TABLEなど.
ここでは、指定されたオブジェクトの定義文を取得する方法を教えます.
HRユーザーの下のemployeesテーブルの構造を取得します.
1.employeesテーブルのフィールドを表示します.
テーブル作成文を取得しようとします.
実行効果は次のとおりです.
表示されている不完全さを発見し、構成パラメータを見てください.
文の再実行
結果はhrですEmployeesのテーブル文です.
テーブルを除いてdbms_metadate.get_ddlはまた、トリガ、ストレージプロセスなどの情報を取得することもできる.
例:
この文の形式は次のとおりです.
本文は“7159900”のブログから出て、転載をお断りします!
PROCEDURE
PACKAGE
PACKAGE BODY
TRIGGER
FUNCTION
TABLEなど.
ここでは、指定されたオブジェクトの定義文を取得する方法を教えます.
HRユーザーの下のemployeesテーブルの構造を取得します.
1.employeesテーブルのフィールドを表示します.
SQL>desc employees;
?
------------------------------------------------- ----------------------------
EMPLOYEE_ID NOT NULL NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
テーブル作成文を取得しようとします.
実行効果は次のとおりです.
SQL> selectDBMS_METADATA.get_ddl('TABLE','EMPLOYEES','HR') from dual;
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
CREATE TABLE "HR"."EMPLOYEES"
( "EMPLOYEE_ID"NUMBER(6,0),
"FIRST_NAME"
SQL>
表示されている不完全さを発見し、構成パラメータを見てください.
SQL> show long
long 80
SQL> set long 9999
文の再実行
SQL>select DBMS_METADATA.get_ddl('TABLE','EMPLOYEES','HR') from dual;
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
CREATE TABLE"HR"."EMPLOYEES"
( "EMPLOYEE_ID" NUMBER(6,0),
"FIRST_NAME" VARCHAR2(20),
"LAST_NAME" VARCHAR2(25)CONSTRAINT "EMP_LA
ST_NAME_NN"NOT NULL ENABLE,
"EMAIL" VARCHAR2(25)CONSTRAINT "EMP_EMAIL_NN" NO
T NULLENABLE,
"PHONE_NUMBER" VARCHAR2(20),
"HIRE_DATE" DATE CONSTRAINT"EMP_HIRE_DATE_NN" NOT N
ULL ENABLE,
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
"JOB_ID" VARCHAR2(10)CONSTRAINT "EMP_JOB_NN"
NOT NULLENABLE,
"SALARY" NUMBER(8,2),
"COMMISSION_PCT" NUMBER(2,2),
"MANAGER_ID" NUMBER(6,0),
"DEPARTMENT_ID" NUMBER(4,0),
CONSTRAINT "EMP_SALARY_MIN"CHECK (salary > 0
) ENABLE,
CONSTRAINT "EMP_EMAIL_UK"UNIQUE ("EMAIL")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS
255 NOLOGGING COMPUTE STATISTICS
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTEN
TS 1MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1BUFFER_
POOLDEFAULT FLASH_CACHE DEFAULT CELL_FL
ASH_CACHEDEFAULT)
TABLESPACE "EXAMPLE" ENABLE,
CONSTRAINT "EMP_EMP_ID_PK"PRIMARY KEY ("EMPLO
YEE_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255NO
LOGGINGCOMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS1 MA
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
XEXTENTS2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GRO
UPS 1BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULTCELL_FLASH_CACHE DEFAULT)
TABLESPACE "EXAMPLE" ENABLE,
CONSTRAINT "EMP_MANAGER_FK"FOREIGN KEY ("MANAGER_ID"
)
REFERENCES"HR"."EMPLOYEES" ("EMPLOYEE_ID") ENABLE,
CONSTRAINT "EMP_JOB_FK"FOREIGN KEY ("JO
B_ID")
REFERENCES"HR"."JOBS" ("JOB_ID") ENABLE,
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
CONSTRAINT "EMP_DEPT_FK"FOREIGN KEY ("DEPART
MENT_ID")
REFERENCES"HR"."DEPARTMENTS" ("DEPARTMENT_ID")
ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255NOCOMPRESS
NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS1
MAXEXTENTS2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1BUFFER_POOL
DEFAULTFLASH_CACHE DEFAULT CELL_FLASH_C
DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES','HR')
--------------------------------------------------------------------------------
ACHEDEFAULT)
TABLESPACE "EXAMPLE"
SQL>
結果はhrですEmployeesのテーブル文です.
テーブルを除いてdbms_metadate.get_ddlはまた、トリガ、ストレージプロセスなどの情報を取得することもできる.
例:
select dbms_metadata.get_ddl ('TRIGGER','ACCOUNT','TEST')from dual;
この文の形式は次のとおりです.
select dbms_metadata.get_ddl (‘object_type’,’object_name’,’username’)from dual
;
本文は“7159900”のブログから出て、転載をお断りします!