【问题标题】:Run PLSQL external script with Liquibase使用 Liquibase 运行 PLSQL 外部脚本
【发布时间】:2014-12-04 16:02:59
【问题描述】:

我使用 Liquibase 在 SQLdeveloper 中管理我的数据库。现在,我们有一个可以自行运行良好的 PLSQL 脚本。它还会在数据库中进行更改。现在,如果我们希望 Liquibase 运行这个 PLSQL 脚本,它会收到以下错误:ORA-00922: missing or invalid option。

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

【问题讨论】:

  • 请给我们看一下存储过程的代码
  • 非常简洁地回答你的问题,是的,Liquibase 可以运行外部 PLSQL。需要注意的一件事-您的术语有点不对劲。没有数据库“SQLdeveloper”。 SQLdeveloper 只是 Oracle 用于管理 Oracle 数据库的用户界面。正如您现在所看到的,管理 Oracle 数据库的方法有很多。另外,我不确定您所说的“它还会在 SQLdeveloper 中进行更改”是什么意思。
  • 是的,你是对的,我的意思是它在数据库中进行了更改

标签: sql oracle plsql oracle-sqldeveloper liquibase


【解决方案1】:

您遇到了两个潜在问题:

  1. 您正在使用<sqlFile>,但未指定splitStatements="false"。默认情况下,Liquibase 会将 SQL 拆分为分号,因为这是 JDBC 驱动程序通常需要的,但在 PL/SQL 脚本中,您可以有一个 CREATE PROCEDURE 或类似的包含分号但仍然是一个语句的东西。您也可以使用<createProcedure> 代替不拆分语句的sqlFile。

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

【讨论】:

  • 感谢您的遮阳篷!我正在努力,希望对您有所帮助
  • 我确实在使用 。正如你所说,我将 splitStatements 更改为“false”,但我仍然得到 ORA-00922。在我们的 plsql 脚本中(我不能在这里粘贴)我们确实使用了“if”和“elseif”,所以脚本中有一些分号。仍然可以在不使用 ? 的情况下运行此脚本
  • ORA-00922 本身就是一个相当通用的响应。它是否提供了任何细节来帮助指出问题所在的脚本部分。只要您不使用 sqlplus 特定功能,您应该能够使用 sqlFile,但除了绑定变量之外,我没有一个很好的列表。
猜你喜欢
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2015-10-01
  • 2014-05-14
相关资源
最近更新 更多