Как получить DDL запрос пакетом DBMS_METADATA без дополнительных деталей?
Если использую запрос:
SQL> select dbms_metadata.get_ddl('TABLE', 'EMP') from dual;
Получаю в результате:
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ENABLE,
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
Можно ли получить DDL запрос без дополнительных деталей, например, STORAGE?
Свободный перевод вопроса Problem with getting an Oracle table ddl but with out the extra detail from the current schema от участника @Hoopoe
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Это возможно, установив параметры процедурой SET_TRANSFORM_PARAM.
Так будет с параметрами по умолчанию:
create table t (
id int primary key, val varchar(16), flag char (1) check (flag in ('y','n')))
/
set long 9999
select dbms_metadata.get_ddl ('TABLE', 'T', user) t_ddl from dual;
T_DDL
--------------------------------------------------------------------------------
CREATE TABLE "DB"."T"
( "ID" NUMBER(*,0),
"VAL" VARCHAR2(16),
"FLAG" CHAR(1),
CHECK (flag in ('y','n')) ENABLE,
PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
TABLESPACE "USERS" ENABLE
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "USERS"
Теперь установив параметры (подробнее см. по ссылке выше):
begin
dbms_metadata.set_transform_param (
dbms_metadata.session_transform, 'SQLTERMINATOR', true);
dbms_metadata.set_transform_param (
dbms_metadata.session_transform, 'PRETTY', true);
dbms_metadata.set_transform_param (
dbms_metadata.session_transform, 'SEGMENT_ATTRIBUTES', false);
dbms_metadata.set_transform_param (
dbms_metadata.session_transform, 'CONSTRAINTS_AS_ALTER', false);
dbms_metadata.set_transform_param (
dbms_metadata.session_transform, 'STORAGE', false);
end;
/
select dbms_metadata.get_ddl ('TABLE', 'T', user) t_ddl from dual;
T_DDL
--------------------------------------------------------------------------------
CREATE TABLE "DB"."T"
( "ID" NUMBER(*,0),
"VAL" VARCHAR2(16),
"FLAG" CHAR(1),
CHECK (flag in ('y','n')) ENABLE,
PRIMARY KEY ("ID")
USING INDEX ENABLE
) ;