【问题标题】:Flyway fails when One procedure calls another, in DB2当一个过程调用另一个过程时,Flyway 失败,在 DB2
【发布时间】:2019-02-25 14:59:24
【问题描述】:

以下 SQL 位在 flyway v5.1.3 对 DB2 LUW 10.5 的情况下失败,但在使用客户端直接在 DB2 中执行时它可以工作。

错误信息:

" DB2 SQL 错误:SQLCODE=-440,SQLSTATE=42884, SQLERRMC=TEST_STATUS;PROCEDURE, DRIVER=4.19.26"

肯定是flyway的问题。有人知道解决方法或修复方法吗?

    CREATE OR REPLACE PROCEDURE TEST_STATUS
  (
    IN a INTEGER,
    INOUT b INTEGER,
    INOUT c INTEGER,
    INOUT d INTEGER
  )
  BEGIN


  END;


CREATE OR REPLACE PROCEDURE TEST_STATUS_MAIN
  (
    IN a    INTEGER,
    IN b INTEGER,
    IN c    INTEGER,
    OUT d BIGINT
  )
  BEGIN
    DECLARe e INTEGER DEFAULT 0;

    CALL TEST_STATUS(a, b, c, e);


  END;

【问题讨论】:

  • 可能是函数路径问题,因此请检查在声明和调用中使用模式名称显式限定 TEST_STATUS 是否会有所不同......另外:不要混合 IN 和 INOUT 类型调用和定义之间的序号参数相同。

标签: db2 flyway


【解决方案1】:

如果CURRENT SCHEMA 不在会话的CURRENT PATH 列表中,则可能会发生这种情况。
假设,
VALUES CURRENT SCHEMA 返回 SCHEMA1
VALUES CURRENT PATH 返回 "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","SCHEMA2"
例程 TEST_STATUS 是在 SCHEMA1 架构中创建的,并在尝试创建 TEST_STATUS_MAIN 时尝试在 "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","SCHEMA2" 列表中找到它。

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多