【发布时间】:2026-02-13 19:45:02
【问题描述】:
我将数据库表中的一些数据作为插入语句导出到 sql 文件中。 现在我想启动它们,但我收到错误 ORA-01704: string literal too long。 问题原因可能是一个 CLOB 列的 XML 数据超过 4000 个字符。
最好的解决方法是什么? 我在该文件中有大约 50 个 SQL 插入语句。
【问题讨论】:
我将数据库表中的一些数据作为插入语句导出到 sql 文件中。 现在我想启动它们,但我收到错误 ORA-01704: string literal too long。 问题原因可能是一个 CLOB 列的 XML 数据超过 4000 个字符。
最好的解决方法是什么? 我在该文件中有大约 50 个 SQL 插入语句。
【问题讨论】:
您可以将数据保留在分隔文件中,而不是使用插入语句,然后使用SQLLDR 或external tables 查看。外部表很棒。
【讨论】:
sed吗?
获得大于 4000 字节的内容的方法是使用最多支持 32767 字节的 pl\sql。以下是如何解决 ORA-01704: string literal too long 错误的示例:
declare
vClobVal varchar2(32767) := '<Add text string here>';
begin
update CLOBTAB set CLOBCOL = vClobVal;
end;
您还可以将您的 colomun 类型从 varchar2 更改为 CLOB
也看看这个链接是否可以帮助你 - http://www.dba-oracle.com/t_ora_01704_string_literal_too_long.htm
【讨论】:
只是考虑一下您应该拆分列的特定列。例如,假设您当前的列是 RANDOM_TEXT,因为 VARCHAR(4000) 它超出了限制,您可以将其拆分为 2 列,例如 RANDOM_TEXT_1 和 RANDOM_TEXT_2,当您编写时,您应该将前 4000 个字符放入第一个 RANDOM_TEXT_1,其余的放入 RANDOM_TEXT_2 .当您将此返回给任何应用程序或任何 api 时,您必须组合并作为单个字符串提供。
【讨论】:
你可以试试这个,它对我有用:
DECLARE
big_text_ CLOB := 'very very very very long text or XML.......';
BEGIN
INSERT INTO table_name (column1, column2, column3_CLOB) VALUES ('value1', 'value2', big_text_);
COMMIT;
END;
【讨论】: