我的要求是使用Flyway工具通过插入脚本插入CLOB / BLOB数据。
我无法找到任何可以实现此目的的内容,所以任何人都可以指导我如何实现这一目标?
答案 0 :(得分:2)
我们需要插入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
文件的一部分,并且硬编码,这对我们的需求很好..它是测试数据!。
注意:我们也以这种方式插入二进制文件(pdfs&amp; images)。好的,所以我们要事先手动准备数据(通过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?中学到了很多东西,并且还插入/更新了测试&amp;以这种方式开发数据。
注意:我们的构建将我们需要的所有测试文件复制到类路径上,然后我们将它们作为资源流访问,这有助于Jenkins Continuous构建,并且不会做任何基于位置的假设文件。