我需要将CLOB
字段用作XML
属性,但需要
error ORA-00932 :inconsistent datatypes: expected-got CLOB.
使用的数据长度始终大于4k,因此我无法使用任何其他数据类型。
Column Used:
EMAIL_SUBJECT_BODY CLOB()
XMLELEMENT("Field" ,
XMLATTRIBUTES(
'Email_Subject_Body' AS "name" ,
EMAIL_SUBJECT_BODY AS "value"
)
ERROR: ORA-00932 :inconsistent datatypes: expected-got CLOB
它适用于:
SELECT TO_CLOB(EMAIL_SUBJECT_BODY) FROM TNAME;
SELECT XMLELEMENT("test", EMAIL_SUBJECT_BODY) FROM TNAME;
但失败了:
SELECT XMLELEMENT("test", XMLATTRIBUTES(EMAIL_SUBJECT_BODY AS "a")) FROM TNAME;
我正在使用Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
。
任何线索如何解决此问题。
答案 0 :(得分:0)
您不能使用长度值>带有XMLELEMENT或XMLATTRIBUTES的4000,其记录的限制。
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions220.htm
有几个选项:
我原本以为你应该能够使用PL / SQL来使用完整的VARCHAR2(32767),但我没有运气。在Google / OTN上有一个流行的例子,乍一看看起来不错,但是这个例子的问题是它使用了一个非常小的字符串。作者未能用>进行测试4K值。一旦超过4K,这也会失败:
declare
body varchar2(32767);
xml clob;
begin
select email_subject_body into body from email where rownum = 1;
-- THIS FAILS TOO
select XMLELEMENT("test", XMLATTRIBUTES(body AS "a")).GETCLOBVAL() INTO xml FROM DUAL;
end;
/
ERROR at line 1:
ORA-01460: unimplemented or unreasonable conversion requested
ORA-06512: at line 6
我把它包括在这里只是为了告诉你。