我正在尝试创建下面的xmlindex,但收到错误“ORA-01704:字符串文字太长”。错误即将发生,因为xmltable中有100个列。是否有其他方法可以为这个大型xmltable创建xmlindex?
CREATE INDEX IDX_XML ON emp(detail_xml) INDEXTYPE IS XDB.XMLINDEX
PARAMETERS
('
XMLTABLE emp_xml (TABLESPACE general)
''/OTC_Dept_Detail''
COLUMNS
Flag varchar2( 5 ) path ''Flags/NettingFlag'',
NettingFlag varchar2( 5 ) path ''nettingFlags/NettingFlag'',
....
....
....
**THERE ARE 100 COLUMNS**
....
....
....
') ;
答案 0 :(得分:0)
您已超出限制。字符串文字限制(大约2500个字符)和PARAMETERS限制它是1000个字符。
要解决这两个限制,您必须使用clob和DBMS_XMLINDEX包。
declare
prams_clob clob :='' ;
PROCEDURE al(p IN OUT NOCOPY CLOB, v VARCHAR2) IS
BEGIN
dbms_lob.append(p, v || chr(13) || chr(10));
END;
begin
dbms_lob.createtemporary(prams_clob, FALSE);
al(prams_clob,q'~XMLTABLE emp_xml ~');
al(prams_clob,q'~ '/OTC_Dept_Detail' ~');
al(prams_clob,q'~ COLUMNS ~');
al(prams_clob,q'~ Flag1 varchar2( 5 ) path 'Flags/NettingFlag', ~');
al(prams_clob,q'~ NettingFlag1 varchar2( 5 ) path 'nettingFlags/NettingFlag', ~');
al(prams_clob,q'~ Flag2 varchar2( 5 ) path 'Flags/NettingFlag', ~');
al(prams_clob,q'~ NettingFlag2 varchar2( 5 ) path 'nettingFlags/NettingFlag', ~');
-- **THERE ARE 100 COLUMNS**
DBMS_XMLINDEX.REGISTERPARAMETER ( 'IND_PARAMS',prams_clob);
end;
接下来使用已注册的参数创建索引
CREATE INDEX IDX_XML ON emp(detail_xml) INDEXTYPE IS XDB.XMLINDEX
PARAMETERS
('PARAM IND_PARAMS') ;
q~'a'b'c~' = 'a''b''b'
- 是替代引用字符串文字。它有助于避免双引号。