将.sql文件中的语句插入Oracle数据库导致ORA-01704:字符串文字太长

将.sql文件中的语句插入Oracle数据库导致ORA-01704:字符串文字太长,sql,oracle,Sql,Oracle,我将数据库表中的一些数据作为insert语句导出到sql文件中。 现在我想启动它们,但我得到错误ORA-01704:字符串文字太长。 问题的原因可能是一个CLOB列的XML数据超过4000个字符 最好的解决办法是什么? 我在该文件中有大约50个SQL insert语句。获取大于4000字节的内容的方法是使用pl\SQL,它最多支持32767字节。下面是一个如何解决ORA-01704:字符串文字过长错误的示例: declare vClobVal varchar2(32767) := '<Ad

我将数据库表中的一些数据作为insert语句导出到sql文件中。 现在我想启动它们,但我得到错误ORA-01704:字符串文字太长。 问题的原因可能是一个CLOB列的XML数据超过4000个字符

最好的解决办法是什么?
我在该文件中有大约50个SQL insert语句。

获取大于4000字节的内容的方法是使用pl\SQL,它最多支持32767字节。下面是一个如何解决ORA-01704:字符串文字过长错误的示例:

declare
vClobVal varchar2(32767) := '<Add text string here>';
begin
update CLOBTAB set CLOBCOL = vClobVal;
end;
声明

vClobVal varchar2(32767):='

对于特定的列,您应该使用拆分列。例如,假设当前列是随机文本,因为VARCHAR(4000)超出了限制,您可以将其分为两列,即随机文本和随机文本,在写入时,您应该将前4000个字符分配给第一个随机文本,将剩余的字符分配给随机文本。当您将数据返回给任何应用程序或任何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;

如果它们大于32767字节怎么办?另外,我还有50个类似这样的insert语句:insert-INTO table_name(column1,column2,column3,…)值(value1,value2,TOO_LONG_VALUE,…)@Marko,9i和10g中的值为8TB,11g中的值为128TB。我怀疑你已经接近极限了。如果它们更大,我会搜索如何使用clob,因为它会变得更复杂,因为你必须读/写多次。我不使用任何应用程序,尝试用sql*plus启动文件。我的意思是,你加载的数据可能会被其他应用程序使用,这就是我提到的。然后,您可能需要一个pl sql来分离大clob并将其放入两个不同的列中…这只是一个建议…是的,我意识到:)但是atm我只有sql insert语句。您可以使用一个合适的文本编辑器和正则表达式在大约五秒钟内将insert语句转换为CSV文件!将“插入到(a,b,c)值中”(“替换为“”,然后替换”);“替换为“”,就完成了。使用正则表达式锚来确保你只得到一行的开始和结束。你能帮我吗?下面是一个sql插入的示例:插入到文档(文档id、收件人id、文件夹id、数据、删除日期、以前的版本)值('766767'、'12'、'0'、''、截止日期('22.02.2013 13:15:07'、'DD.MM.rrrrr HH24:MI:SS'),null);你在哪个站台?您是否有权访问
sed
?或者,您可以发布一个新的问题帖子“如何将SQL insert语句转换为CSV”,您可能会得到一系列更好的答案!