【问题标题】:ORA-01704: string literal too long 'Error when inserting XML document in Oracle XMLTYPE column type'ORA-01704: 字符串文字太长“在 Oracle XMLTYPE 列类型中插入 XML 文档时出错”
【发布时间】:2016-07-02 01:05:15
【问题描述】:

当我尝试将 SQL 表中的数据插入 Oracle 表时,我收到此错误“ORA-01704: string literal too long”。在我的 Oracle 表中,我有一个 XMLTYPE 列类型的列。当我创建表时,我指定了这样的 XML 列:

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

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

【问题讨论】:

  • 你得到什么错误?请将其添加到问题中。
  • 您使用的是什么版本的 Oracle,特定 INSERT 中的 XML 有多大?
  • 我使用的是“Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production”这个版本,XML 大小为 4.39 KB(4.497 字节)

标签: xml oracle


【解决方案1】:

我的猜测是您将 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;

但如果你有: Meeesaaagee(+ 3976 个额外字符)

你会得到 ORA-01704: string literal too long 错误。

你可以试试:

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 代码并使用绑定变量,那么您必须与应用程序开发人员交谈。它在 Oracle 之外(并且在我的知识之外)。

【讨论】:

  • Nick S,抱歉回复晚了。这与 PL/SQL 是唯一的解决方案。我的问题是如何将参数传递给这个 PL/SQL 过程并将 XML 参数分配给这个声明参数 in_xml_value varchar2(32767)? PL/SQL 不是我的强项。谢谢你的回答。
  • Nick S,经过一段时间的测试,我成功地使用 PL/SQL 解决了我的问题。非常感谢!
【解决方案2】:

错误在哪里?显示插入语句。我在这里没有看到任何问题:

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>'));

【讨论】:

  • 声明一切正常。我知道是因为我将它与另一个表一起使用,但该表的 XML 文档比这个小,并且 xml 完美地插入到表中。我认为问题在于 XML 文档的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多