我从数据库迁移一些数据并将其放入data.xml文件中 例如:
<insert tableName="ORG_CUSTOMER">
<column name="My-Column" value="a very long string.."/>
</insert>
然后我用cmd命令执行它
call ..\liquibase\liquibase-bin\liquibase.bat --changeLogFile=%DATA% --defaultSchemaName=NAME_DBA --defaultsFile=liquibase-local.properties update
因为该值有时超过4000个字符,我会收到错误:
运行Liquibase时出现意外错误:ORA-01704:字符串文字太长
该列具有价值clob。自动生成的xml文件包含许多我不想手动编辑的插入。我读了一些东西,使它成为一个准备好的声明或使用pl / sql将工作,但我现在不怎么做?
答案 0 :(得分:0)
如果没有liquibase.bat
的代码,很难说但是。
文本文字具有
CHAR
和VARCHAR2
数据类型的属性:
- 在表达式和条件中,Oracle通过使用空白填充的比较语义来比较文本文字,就好像它们具有数据类型
CHAR
一样。- 文本文字的最大长度为4000字节。
我猜这个脚本是天真地转换XML:
<insert tableName="ORG_CUSTOMER">
<column name="My-Column" value="a very long string.."/>
</insert>
要
INSERT INTO {tablename} ( "{column.name}" ) VALUES ( '{column.value}' );
,当文本文字超过4000个字节时,这将失败。
要解决此问题,您需要编辑脚本以处理超过4000个字节的CLOB
值(不能使用文本文字)。
答案 1 :(得分:0)
Oracle - 默认情况下 - 字符串文字的限制为4000字节。
如果你在12.1或更新,你可以raise that limit to 32k。
如果您使用的是旧版本或无法更改参数,则无法使用Liquibase的<insert>
更改。
您可以尝试<loadData>
更改并希望它使用PreparedStatement,在这种情况下,限制不适用:
http://www.liquibase.org/documentation/changes/load_data.html