【发布时间】: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 会注意到这个问题并发表评论。