2014-12-04 155 views
0

即时通讯使用Liquibase在SQL开发者中管理我的数据库。现在,我们有一个PLSQL脚本,它本身运行良好。它也会对数据库进行更改。现在,如果我们希望Liquibase运行这个PLSQL脚本,它会得到以下错误:ORA-00922:缺少或无效的选项。用Liquibase运行PLSQL外部脚本

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

+0

请向我们展示存储过程的代码 – 2014-12-04 16:07:29

+0

要非常简洁地回答您的问题,是的,Liquibase可以运行外部PLSQL。有一点需要注意 - 你的术语有点偏离。没有数据库“SQL开发者”。 SQLdeveloper只是用于管理Oracle数据库的Oracle用户界面。正如您现在所看到的,有很多方法可以管理Oracle数据库。另外,我不确定你的意思是“它也会改变SQL开发者”。 – SteveDonie 2014-12-04 17:18:08

+0

是的你是对的,我的意思是它使数据库中的更改 – 2014-12-08 08:44:18

回答

2

有你正在运行到两个潜在的问题:

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

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

+0

感谢您的支持者!我现在正在处理它,希望它能帮助 – 2014-12-08 08:46:45

+0

我的确在使用。我像你说的那样将splitStatements改为“false”,但我仍然得到ORA-00922。在我们的plsql脚本中(我不能在这里粘贴)我们使用“if”&“elseif”,所以脚本中有一些分号。在不使用的情况下运行此脚本仍然可行吗? – 2014-12-08 09:37:41

+0

ORA-00922本身就是一个相当通用的响应。它是否提供了任何细节来帮助指出问题的脚本部分。只要你没有使用sqlplus的特定功能,你应该可以使用sqlFile,但除了绑定变量之外,我没有一个很好的列表。 – 2014-12-09 21:46:10