Создание сценария DDL для объекта без имени схемы, запеченного с использованием DBMS_METADATA.GET_DDL?

Как я могу создать сценарий DDL для моего объекта с DBMS_METADATA.GET_DDL без имени схемы, запеченной в?

С DBMS_METADATA.GET_DDL:

CREATE TABLE "MYSCHEMA"."MYTABLE"
(
  "COL1"  NUMBER(10,0)
)

Разработчик SQL может сделать это, и я думаю, что он также использует DBMS_METADATA для достижения этой цели и генерации сценариев DDL.

С разработчиком SQL:

CREATE TABLE "MYTABLE"
(
  "COL1"  NUMBER(10,0)
)

2 ответа

Решение

Используйте SET_REMAP_PARAM с опцией REMAP_SCHEMA:

DBMS_METADATA.SET_REMAP_PARAM(th,'REMAP_SCHEMA','HR',NULL);

Это отобразит схему HR на NULL (вам понадобится дескриптор задания); полный пример см. в документации metadata_api.

Недавно я наткнулся на следующее, которое позволяет вам получить ddl без имени схемы.

Это выглядит намного проще, чем любой другой способ, который я видел до сих пор, хотя он не включен ни в одну документацию Oracle. Я заметил это в журнале отчетов в SQL Developer, который генерирует ddl без имени схемы.

DBMS_METADATA.SET_TRANSFORM_PARAM(dbms_metadata.SESSION_TRANSFORM, 'EMIT_SCHEMA', false);

Вам не нужно получать дескрипторы или что-нибудь неприятное, просто EXEC выше, прежде чем вызывать DBMS_METADATA.GET_DDL

В дополнение к удалению схемы (как было предложено Дэвидом Норрисом выше), если вы хотите удалить хранилище и другие атрибуты. По сути, просто простой DDL, затем используйте ниже:

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, 'STORAGE', FALSE);      
DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'EMIT_SCHEMA', FALSE);
END;
Другие вопросы по тегам