#oracle #oracle12c #xmltype #data-dictionary #lob
#Oracle #oracle12c #xmltype #словарь данных #подбросить
Вопрос:
У меня есть таблица ниже с двумя столбцами XMLTYPE (ERROR_FLAG, COL_XML) и одним столбцом LOB (LOG_TEXT)
CREATE TABLE APPLICATION_LOG
(
ID NUMBER NOT NULL,
LOG_TIME TIMESTAMP(6) NOT NULL,
ERROR_FLAG XMLTYPE,
LOG_TEXT CLOB,
COL_XML XMLTYPE,
LOG_MESSAGETYPE VARCHAR2(30 BYTE) NOT NULL
)
XMLTYPE COL_XML STORE AS SECUREFILE BINARY XML (
TABLESPACE users
ENABLE STORAGE IN ROW
CHUNK 8192
NOCACHE
NOLOGGING)
ALLOW NONSCHEMA
DISALLOW ANYSCHEMA
LOB (LOG_TEXT) STORE AS BASICFILE (
TABLESPACE users
ENABLE STORAGE IN ROW
CHUNK 8192
PCTVERSION 10
NOCACHE
NOLOGGING)
NOCOMPRESS
TABLESPACE users
;
Если я выполняю запрос ниже, я получаю три строки
SELECT *
FROM dba_lobs l
WHERE l.table_name = 'APPLICATION_LOG'
AND l.owner = 'SYSTEM'
Как узнать, для какого столбца XMLTYPE предназначен первый LOB (ERROR_FLAG ИЛИ COL_XML), потому что их имена теперь генерируются системой?
Как найти SYS_NC00004 $ —-> соответствует чему?
Ответ №1:
Вы можете использовать такое самосоединение с помощью dba_tab_cols
(или user_tab_cols
исследования только для текущего пользователя) словарного представления, такого как
SELECT c2.data_type, c2.column_name, c1.data_type, c1.column_name
FROM dba_tab_cols c1
JOIN dba_tab_cols c2
ON c1.segment_column_id = c2.column_id
AND c1.table_name = c2.table_name
AND c2.data_type = 'XMLTYPE'
WHERE c1.table_name = 'APPLICATION_LOG'