我得到这个错误'ORA-01704:字符串文字太长',而我试图插入数据从SQL表在Oracle表。在我的Oracle表中,我有一个XMLTYPE列类型的列。当我创建表时,我指定了这样的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>'));
我的猜测是,您将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”? 谢谢。