Oracle - 创建xmlindex时出现“ORA-01704:字符串文字太长”错误

时间:2018-02-06 17:53:42

标签: sql oracle

我正在尝试创建下面的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**
            ....
            ....
            ....
 ') ;

1 个答案:

答案 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' - 是替代引用字符串文字。它有助于避免双引号。