如何使用Flyway插入CLOB / BLOB数据?

时间:2017-05-03 11:27:46

标签: flyway

我的要求是使用Flyway工具通过插入脚本插入CLOB / BLOB数据。

我无法找到任何可以实现此目的的内容,所以任何人都可以指导我如何实现这一目标?

1 个答案:

答案 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构建,并且不会做任何基于位置的假设文件。