열 (DYNAMIC_SQL
)에 포함 된 일련의 '동적'SQL 쿼리가 있는데 '동적'쿼리 자체는 매우 기본입니다.오라클 - 동적 SQL/XMLTable 성능 저하
SELECT ROWID AS RECORD_ID, COLUMN_1 AS STR_VALUE, '-Undefined-' AS STR_IDENTIFIER_VALUE, 'DS_1319' AS DS_TABLE_NAME FROM DS_1319
그러면 XMLTABLE
과 GETXML
의 조합을 사용하여 결과를 추출하고 표시합니다.
그러나 쿼리가 실행되고 의도 한대로 작동하더라도 성능이 매우 좋지 않음을 알았습니다 (NB : DS_1319
의 행 개수는 13,939입니다).
다음과 같이 내가 사용 쿼리는 다음과 같습니다
SELECT
T1.*,
T2.RECORD_ID,
T2.STR_VALUE,
T2.STR_IDENTIFIER_VALUE
FROM
CP_RDN_IN_DYNAMIC_SQL_TMP T1,
XMLTABLE('/ROWSET /ROW'
PASSING XMLTYPE(DBMS_XMLGEN.GETXML(T1.DYNAMIC_SQL))
COLUMNS RECORD_ID VARCHAR2(255) PATH 'RECORD_ID',
STR_VALUE VARCHAR2(255) PATH 'STR_VALUE',
STR_IDENTIFIER_VALUE VARCHAR2(255) PATH 'STR_IDENTIFIER_VALUE',
DS_TABLE_NAME VARCHAR2(255) PATH 'DS_TABLE_NAME') T2
WHERE
T1.DS_TABLE_NAME = T2.DS_TABLE_NAME
NB : DYNAMIC_SQL
다음과 같이 정의 된 열을;
'SELECT ROWID AS RECORD_ID, '||
T1.FIELD_NAME||' AS STR_VALUE, '||
T1.IDENTIFIER_FIELD_NAME||' AS STR_IDENTIFIER_VALUE, '''||
T1.DS_TABLE_NAME||''' AS DS_TABLE_NAME
FROM'||T1.DS_TABLE_NAME AS DYNAMIC_SQL
다음은 데이터의 작은 추출물입니다.
<?xml version="1.0"?>
<ROWSET>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAA</RECORD_ID>
<STR_VALUE>ORACLE</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAB</RECORD_ID>
<STR_VALUE>Oracle</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAC</RECORD_ID>
<STR_VALUE>Oracle 9i</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAD</RECORD_ID>
<STR_VALUE>Oracle 11g</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAE</RECORD_ID>
<STR_VALUE>Oracle CRM</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAF</RECORD_ID>
<STR_VALUE>oracle 10g</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAG</RECORD_ID>
<STR_VALUE>ORACLE, XE</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAH</RECORD_ID>
<STR_VALUE>XE</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAI</RECORD_ID>
<STR_VALUE>MS Windows</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAJ</RECORD_ID>
<STR_VALUE>Microsoft Windows Vista</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAK</RECORD_ID>
<STR_VALUE>Vista</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAL</RECORD_ID>
<STR_VALUE>MSOFT Win Vista</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAM</RECORD_ID>
<STR_VALUE>Microsoft Office</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAN</RECORD_ID>
<STR_VALUE>MS SQL Server</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAO</RECORD_ID>
<STR_VALUE>VISTA MS WINDOWS</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAP</RECORD_ID>
<STR_VALUE>Windows vista</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAQ</RECORD_ID>
<STR_VALUE>Microsoft Windows 2000</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
<ROW>
<RECORD_ID>AAAGU2AABAAAShJAAR</RECORD_ID>
<STR_VALUE>Macromedia</STR_VALUE>
<STR_IDENTIFIER_VALUE>-Undefined-</STR_IDENTIFIER_VALUE>
<DS_TABLE_NAME>DS_1319</DS_TABLE_NAME>
</ROW>
</ROWSET>
내가 원하는 결과를 달성하기 위해보다 효율적인 접근 방식이 상당히 확실 해요, 그래서 몇 가지 조언/제안 거기에 어떤 큰 두뇌가있는 경우, 그것은 아주 많이 나는 열려있어 (주시면 감사하겠습니다 Pure SQL, PL/SQL 등)에 접근 할 수 있습니다.
미리 감사드립니다.
감사합니다; 구현하고 검증 할 것입니다 (Pure SQL 이외의 다른 것은 나에게 매우 새롭기 때문에 테스트하는 동안 나와 함께하시기 바랍니다 : D). 다시 한 번 감사드립니다 - 많이 감사드립니다. – MAndrews