我正在使用Liquibase来管理SQLdeveloper中的数据库。现在,我们有一个可以自行运行的PLSQL脚本。它还会在数据库中进行更改。现在,如果我们希望Liquibase运行此PLSQL脚本,则会收到以下错误:ORA-00922:缺少选项或无效选项。
Liquibase甚至可以运行外部PLSQL脚本吗?
答案 0 :(得分:2)
您遇到两个潜在问题:
您正在使用<sqlFile>
但未指定splitStatements="false"
。默认情况下,Liquibase会以分号分割SQL,因为这是JDBC驱动程序通常需要的,但在PL / SQL脚本中,您可以使用单个CREATE PROCEDURE或类似的包含分号但仍然是一个语句的东西。您也可以使用<createProcedure>
而不是不拆分语句的sqlFile。
您的脚本中包含特定于sqlplus的功能。 SQLPlus和SQLDeveloper并不是简单地将SQL字符串直接传递给数据库,它们有自己的功能来有时修改实际执行的内容。 JDBC和Liquibase没有所有相同的功能,所以如果你在脚本中使用它们将无法工作。如果是这种情况,最好的方法是使用带<executeCommand>
的changeSet来调用sqldeveloper或sqlplus。