使用Liquibase运行PLSQL外部脚本

使用Liquibase运行PLSQL外部脚本,sql,oracle,plsql,oracle-sqldeveloper,liquibase,Sql,Oracle,Plsql,Oracle Sqldeveloper,Liquibase,我使用Liquibase在SQLdeveloper中管理我的数据库。现在,我们有了一个本身运行良好的PLSQL脚本。它还可以在数据库中进行更改。现在,如果我们想让Liquibase运行这个PLSQL脚本,它会得到以下错误:ORA-00922:缺少或无效选项 Liquibase甚至可以运行外部PLSQL脚本吗?您会遇到两个潜在问题: 您正在使用,但未指定splitStatements=“false”。默认情况下,Liquibase将以分号分隔SQL,因为JDBC驱动程序通常需要分号,但在PL/SQ

我使用Liquibase在SQLdeveloper中管理我的数据库。现在,我们有了一个本身运行良好的PLSQL脚本。它还可以在数据库中进行更改。现在,如果我们想让Liquibase运行这个PLSQL脚本,它会得到以下错误:ORA-00922:缺少或无效选项


Liquibase甚至可以运行外部PLSQL脚本吗?

您会遇到两个潜在问题:

  • 您正在使用
    ,但未指定
    splitStatements=“false”
    。默认情况下,Liquibase将以分号分隔SQL,因为JDBC驱动程序通常需要分号,但在PL/SQL脚本中,可以有一个包含分号但仍然是一条语句的创建过程或类似过程。您还可以使用
    代替不分割语句的sqlFile

  • 您的脚本中包含sqlplus特定的功能。SQLPlus和SQLDeveloper并不是简单地将SQL字符串直接传递给数据库,它们有自己的功能,有时可以修改实际执行的内容。JDBC和Liquibase没有所有相同的功能,因此如果您在脚本中使用它,它们将无法工作。如果是这种情况,最好的方法是使用带有
    的变更集来调用sqldeveloper或sqlplus


  • 请向我们展示存储过程的代码,以便非常简洁地回答您的问题。是的,Liquibase可以运行外部PLSQL。有一件事需要注意——你的术语有点不恰当。没有数据库“SQLdeveloper”。SQLdeveloper只是Oracle管理Oracle数据库的用户界面。正如您现在看到的,有许多方法可以管理Oracle数据库。另外,我不确定你所说的“它也在SQLdeveloper中进行了更改”是什么意思。是的,你是对的,我的意思是它在数据库中进行了更改感谢awnser!我现在正在努力,希望它能对我有所帮助。我确实在使用。正如你所说,我将splitStatements更改为“false”,但我仍然得到ORA-00922。在我们的plsql脚本中(我不能在这里粘贴它),我们确实使用了“if”和“elseif”,所以脚本中有一些分号。仍然可以在不使用ORA-00922的情况下运行此脚本?ORA-00922本身就是一个相当通用的响应。它是否提供了任何细节来帮助指出脚本中存在问题的部分。只要不使用sqlplus特定的特性,就应该能够使用sqlFile,但除了绑定变量之外,我手头上没有一个很好的列表。