ORA-01704:字符串文字太长';在Oracle XMLTYPE列类型';中插入XML文档时出错;
当我试图从Oracle表中的SQL表中插入数据时,出现了错误“ORA-01704:字符串文字太长”。在我的Oracle表中,有一个列的类型为XMLTYPE column。创建表时,我指定了如下XML列:ORA-01704:字符串文字太长';在Oracle XMLTYPE列类型';中插入XML文档时出错;,xml,oracle,Xml,Oracle,当我试图从Oracle表中的SQL表中插入数据时,出现了错误“ORA-01704:字符串文字太长”。在我的Oracle表中,有一个列的类型为XMLTYPE column。创建表时,我指定了如下XML列: CREATE TABLE REPORTS ( ... XML XMLTYPE NULL ); 除此列之外,在它之前还有其他23列,当我从insert语句XML列中排除时,insert正在传递。XML列包含表中所有其他23列的XML格式数据。我是否应该在XML列中为长
CREATE TABLE REPORTS (
...
XML XMLTYPE NULL );
除此列之外,在它之前还有其他23列,当我从insert语句XML列中排除时,insert正在传递。XML列包含表中所有其他23列的XML格式数据。我是否应该在XML列中为长度或其他内容添加一些附加规范 错误在哪里?显示insert语句。我认为这里没有任何问题:
CREATE TABLE TEST_REPORTS
(
ID NUMBER,
DESCRIPTION VARCHAR2 (50),
XML XMLTYPE NULL
);
INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML ('<MyMessage>Meeesaaagee</MyMessage>'));
创建表测试报告
(
身份证号码,
说明VARCHAR2(50),
XML XMLTYPE NULL
);
插入测试报告(ID、说明、XML)
值(1,'BLAH BLAH',XMLTYPE.CREATEXML('meeesaagee');
我猜您正在将XML作为文本传递给insert语句。Oracle的SQL在一个文本中最多只能处理4000个字符。否则,您需要使用绑定变量并将其分块传递。也可以使用PL/SQL
例如,这应该可以正常工作,因为
<MyMessage>Meeesaaagee</MyMessage>
meeesaagee
只有34个字符:
CREATE TABLE TEST_REPORTS
(
ID NUMBER,
DESCRIPTION VARCHAR2 (50),
XML XMLTYPE NULL
);
INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML ('<MyMessage>Meeesaaagee</MyMessage>'));
COMMIT;
创建表测试报告
(
身份证号码,
说明VARCHAR2(50),
XML XMLTYPE NULL
);
插入测试报告(ID、说明、XML)
值(1,'BLAH BLAH',XMLTYPE.CREATEXML('meeesaagee');
犯罪
但如果你有:
Meeesaaagee(+3976个额外字符)
您将得到ORA-01704:string literal过长错误
你可以试试:
DECLARE
in_xml_value varchar2(32767);
BEGIN
in_xml_value := '<MyMessage>MeeesaaageeBLAHBLAHBLAH<--repeat--></MyMessage>';
INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML (in_xml_value);
commit;
END;
/
声明
in_xml_值varchar2(32767);
开始
in_xml_值:='meeesaaageeblahblahblahblah';
插入测试报告(ID、说明、XML)
值(1,'BLAH BLAH',XMLTYPE.CREATEXML(in_xml_value);
犯罪
结束;
/
使用PL/SQL代码并使用绑定变量,您必须与应用程序开发人员交谈。这不属于Oracle(也不属于我的知识范围).您会遇到什么错误?请将此添加到问题中。您使用的是Oracle的哪个版本,以及特定的
插入中的XML有多大?
?我使用的是“Oracle Database 11g Enterprise Edition 11.2.0.3.0-64位生产版”,XML大小为4,39 KB(4.497字节)该语句一切正常。我知道,因为我在另一个表中使用了它,但该表的XML文档比这个表小,而且XML插入到表中的效果很好。我认为问题在于XML文档的大小。Nick S,很抱歉回答得太晚。使用PL/SQL是唯一的解决方案。我的问题是如何传递t这个PL/SQL过程的参数和XML参数在值varchar2(32767)中分配给这个declare参数?PL/SQL不是我的强项。谢谢你的回答。Nick S,经过一段时间的测试,我成功地用你的PL/SQL方法解决了我的问题。非常感谢!