【问题标题】:PL/SQL inline functions are not supported by Flyway?Flyway 不支持 PL/SQL 内联函数?
【发布时间】:2020-03-07 23:31:26
【问题描述】:

由于 Oracle 12c 可以在 SQL 查询中编写内联函数,请考虑 Inline Functions 但是,显然在 flyway 脚本中使用此语法时它不起作用。据我了解 Flyway 文档,没有考虑这种用法,请考虑 Flyway documentation:“SQL 脚本语法”部分。当我尝试使用它时,我不断得到 ​​p>

ORA-06553: PLS-103: Encountered the symbol "end-of-file" when expecting one of the following: := ; not null default character

那么,我是否理解我不能在 Flyway 中使用内联 PL/SQL 函数?

这是我的脚本:

CREATE OR REPLACE VIEW TEST_VIEW AS
WITH
FUNCTION testfunction (input IN NUMBER) RETURN VARCHAR2
IS
BEGIN
  return 'fffff';
END;
SELECT
  testfunction(2) AS TEST_COLUMN
FROM dual;
/

【问题讨论】:

  • 只需在脚本后添加/
  • 我已经读过它了。那没有帮助。我在帖子中添加了一个测试脚本。使用 SQL Developer 它运行,通过 flyway 它抛出提到的异常。
  • 您需要在每个 PL/SQL 程序块之后有一个/ 在下一行,基本上就是每个以end; 结尾的块。但在这种情况下,应该不需要/,因为该函数是内联在视图中的,并且语句仅在from dual 之后结束。看来这确实是 Flyway 的一个缺点。我认为 Flyway 试图在单独的语句中分解脚本,但在这个视图上失败了。
  • 我认为这与 liquibase liquibase issue 的问题相同
  • 嗯,我认为 Flyway 的 USP 是它按原样处理 SQL,争论 "unmodified SQL files generated by your native tools containing all kinds of complexity"。也许@axelfontaine 会注意到这个问题并发表评论。

标签: oracle plsql flyway


【解决方案1】:

您可以使用匿名 PL/SQL 块来创建视图吗?

--Create view with dynamic SQL to avoid Flyway parser bug.
begin
    execute immediate q'[
CREATE OR REPLACE VIEW TEST_VIEW AS
WITH
FUNCTION testfunction (input IN NUMBER) RETURN VARCHAR2
IS
BEGIN
  return 'fffff';
END;
SELECT
  testfunction(2) AS TEST_COLUMN
FROM dual
]';
end;
/

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 2021-01-21
    • 2011-06-25
    • 2012-02-14
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多