SQLPlus 在插入时删除 clob 字段中的尾随空格

Posted

技术标签:

【中文标题】SQLPlus 在插入时删除 clob 字段中的尾随空格【英文标题】:SQLPlus removes trailing spaces in clob field on insert 【发布时间】:2009-10-14 11:51:43 【问题描述】:

我正在使用 SQL Plus 11.1.0.6.0 运行一个脚本,该脚本将批量插入到 Oracle 10g 数据库中。 我注意到的问题是在将一些代码字符串插入到包含尾随空格的某些行的 clob 字段中时,例如:

....public void myMethod().... --trailing space here
....
........int myVar = 1;
........ -- empty line with trailing spaces
........myVar+=1
....

插入到表中的字符串会丢失空行中的那些空尾空格并变为:

....public void myMethod() --trailing space is lost
....
........int myVar = 1;
-- empty line without trailing spaces
........myVar+=1
....

虽然它对有用的数据没有影响,但这很令人沮丧,因为它会导致数据与原始数据不同并且无法通过一些测试。

我能找到的只是 SET TRIMSPOOL/TRIMOUT OFF 这不会改变任何东西,还有其他人有什么想法吗?

【问题讨论】:

您可以发布您正在使用的脚本吗? 【参考方案1】:

如果不发布您的脚本,很难确定,但您可能不应该将文本字符串直接插入到 SQLPlus 中的 CLOB 中。如果您要使用从文件中提取文本并从 SQL 调用 PL/SQL 的 PL/SQL procPlus,它应该保留所有格式。

但这可能是全能的 PITA。但它在 O'Reilly PL/SQL 文本中有详细记录。

【讨论】:

【参考方案2】:

最后我通过这样的 hack 解决了它(考虑原始示例):

declare
myLargeValue_2 clob;
begin
myLargeValue_2 := '....public void myMethod()'||'....
'||'....
........int myVar = 1;
'||'........' -- empty line with trailing spaces

and so on

基本上明确地连接所有空格

【讨论】:

【参考方案3】:

您可以尝试启用以下参数:

SET SQLBLANKLINES ON

【讨论】:

以上是关于SQLPlus 在插入时删除 clob 字段中的尾随空格的主要内容,如果未能解决你的问题,请参考以下文章

oracle 插入 clob字段的问题 及 python读取clob字段

kettle合并记录 新旧表明明关键字段id一致结果老数据标记删除,新数据标记插入,求解

Oracle JDBC Clob 插入问题 ORA-00942

怎么把二进制流插入oracle的clob字段

使用kettle做orcale数据交换(插入/更新)时,遇到数据类型为CLOB的情况时就交换不了是啥原因?

oracle 10G数据库如何插入clob字段的值的简单语句sql语句