Создание сценария 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;