当前位置: 首页 > 知识库问答 >
问题:

ORA-01704:字符串文字太长“在Oracle XMLTYPE列类型中插入XML文档时出错”

周鸿光
2023-03-14

我得到这个错误'ORA-01704:字符串文字太长',而我试图插入数据从SQL表在Oracle表。在我的Oracle表中,我有一个XMLTYPE列类型的列。当我创建表时,我指定了这样的XML列:

  CREATE TABLE REPORTS (
       ...
    XML XMLTYPE NULL ); 

除此列之外,在它之前还有其他23列,当我从insert语句XML列中排除时,insert正在传递。XML列包含表中所有其他23列的XML格式数据。我是否应该在XML列中为长度或其他内容添加一些附加规范?

共有2个答案

轩辕炎彬
2023-03-14

错误在哪里?显示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>'));
祁渊
2023-03-14

我的猜测是,您将XML作为文字传递给插入语句。Oracle的SQL只能处理4000个字符。否则,您需要使用绑定变量并将其分块传递。或者可以使用PL/SQL。

例如,这应该可以正常工作,因为

<MyMessage>Meeesaaagee</MyMessage> 

只有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;

但是如果你有: Meeesaagee(3976个额外字符)

您将得到ORA-01704:字符串文字过长的错误。

你可以试试:

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;
/

使用PL/SQL代码并使用绑定变量,您必须与应用程序开发人员交谈。这超出了甲骨文(也超出了我的知识范围)。

 类似资料:
  • 问题内容: 获取XML文档()的String表示的最简单方法是什么?那就是所有节点都将在一行上。 例如,从 (这只是一个树表示形式,在我的代码中它是一个对象,因此我不能将其视为字符串) 至 谢谢! 问题答案: 假设您的实例是:

  • 问题内容: 我需要为Oracle数据库11g r2中的CLOB数据类型分配大约30,000行的非常大的xml数据。我在Oracle Sql Developer中使用此命令。 当我使用以下命令时,首先会得到7条提示,然后在语句执行完成时,出现“字符串文字太长”错误。 我在xml数据中使用了七个双引号(单引号)来转义单引号。 如何将此数据分配给CLOB列? 问题答案: 一种方法是使用sqlldr。首先

  • 问题内容: 我已经摆弄了二十多分钟,而我的Google-foo让我失望了。 假设我有一个用Java创建的XML文档(org.w3c.dom.Document): 如何将文档对象转换为文本字符串? 问题答案:

  • 大家好。我必须制作这个程序,输入一个文本,输出有多少个单词,以及有多少个长度为1、2等的单词。我已经完成了计算单词数的程序,但对于第二部分我不知道。非常感谢任何能帮忙的人。

  • 问题内容: 我有一个Java程序,旨在考虑xml dom并将其写入字符串。我正在使用这些软件包:和 所以我有,,对象… 有没有办法在一个调用中获取代表我的xml dom的字符串? 问题答案: 它不是一个电话,而是: setOutputProperty方法使字符串输出更漂亮,因此可以将其取出。

  • 在JSP页面中,我可以使用JSTL加载xml文件,从xml文件路径或url加载到JSTL变量,如下所示: 现在,如果我的xml文件在String变量而不是文件系统中,我如何做完全相同的事情? 说我有 如何将其导入jstl var“xmldocument”? 谢谢。