【问题标题】:How to Insert CLOB/BLOB data using Flyway?如何使用 Flyway 插入 CLOB/BLOB 数据?
【发布时间】:2017-10-01 05:01:19
【问题描述】:

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

我无法找到任何实现这一目标的方法,所以请任何人指导我如何实现这一目标?

【问题讨论】:

    标签: flyway


    【解决方案1】:

    我们需要插入 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 持续构建,并且不对关于文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多