【发布时间】:2017-10-01 05:01:19
【问题描述】:
我的要求是使用 Flyway 工具通过插入脚本插入 CLOB/BLOB 数据。
我无法找到任何实现这一目标的方法,所以请任何人指导我如何实现这一目标?
【问题讨论】:
标签: flyway
我的要求是使用 Flyway 工具通过插入脚本插入 CLOB/BLOB 数据。
我无法找到任何实现这一目标的方法,所以请任何人指导我如何实现这一目标?
【问题讨论】:
标签: flyway
我们需要插入 XML 文件(作为 blob),因此,我们的 Oracle Flyway 脚本中有两种插入/更新和操作 blob 的脚本:
一个:通过存储过程迁移(即只是在 Flyway *.sql 文件中的 PL-SQL,而不是普通 SQL)。我们使用Oracle的utl_raw.cast_to_raw()函数。
declare
p_surveyBlob raw(10000);
begin
p_surveyBlob := utl_raw.cast_to_raw('<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<Survey>
<UserOnSite="yes">
<Role>cooper</Role>
. . . and so on...
</Survey>');
Insert into SURVEY (FILE_SIZE,FILE_DATA. . . .)
values (dbms_lob.getlength(p_surveyBlob),p_surveyBlob. . . .);
COMMIT;
end;
此方法要求 BLOB 数据成为 Flyway *.sql 文件的一部分,并进行硬编码以满足我们的需求。它是测试数据!。
注意:我们也以这种方式插入二进制文件(pdf 和图像)。好的,所以我们必须事先手动准备数据(通过 Cygwin 的 base64 编码器实用程序运行文件,以便将其转换为 base64 字符串)。然后将该字符串与 2 个 Oracle 函数一起使用,如下所示:
utl_encode.base64_decode(utl_raw.cast_to_raw('the base64 string returned by cygwins base64 function'))
两个:通过 Java 迁移。 我们从这篇帖子How to write / update Oracle blob in a reliable way? 中学到了很多东西,并且还在以这种方式插入/更新测试和开发数据。
注意:我们的构建将我们需要的所有测试文件复制到类路径上,然后我们将它们作为资源流访问,这有助于 Jenkins 持续构建,并且不对关于文件。
【讨论】: