执行 DBMS_AQADM 变更集失败 - 原因:liquibase.exception.DatabaseException:ORA-00900:无效的 SQL 语句

问题描述 投票:0回答:2

我在使用以下 Liquibase 变更集时遇到问题

- changeSet:
id: 25
author: My_User
comment: "some comment"
objectQuotingStrategy: LEGACY
runAlways: true
changes:
- sql:
    dbms: oracle
    endDelimiter: ;
    splitStatements: true
    sql: execute DBMS_AQADM.GRANT_QUEUE_PRIVILEGE ('ALL', 'MY_SCHEMA.Q_ARCHIVECUST_REQUESTS', 'my_role')
    stripComments: true

当我运行它时,出现以下错误

20:56:25.190 DEBUG [liquibase.changelog.ChangeSet]: Reading ChangeSet: common.yaml::25::My_User
20:56:25.191 DEBUG [liquibase.database.core.OracleDatabase]: Executing Statement: execute DBMS_AQADM.GRANT_QUEUE_PRIVILEGE ('ALL', 'MY_SCHEMA.Q_ARCHIVECUST_REQUESTS', 'my_role')
20:56:25.191 INFO  [liquibase.executor.jvm.JdbcExecutor]: execute DBMS_AQADM.GRANT_QUEUE_PRIVILEGE ('ALL', 'MY_SCHEMA.Q_ARCHIVECUST_REQUESTS', 'my_role')
20:56:25.329 ERROR [liquibase.changelog.ChangeSet]: Change Set common.yaml::25::My_User failed.  Error: ORA-00900: invalid SQL statement
  [Failed SQL: (900) execute DBMS_AQADM.GRANT_QUEUE_PRIVILEGE ('ALL', 'MY_SCHEMA.Q_ARCHIVECUST_REQUESTS', 'my_role')]

我可以在 SQL Developer 中运行 find 语句。

如果您能提供一些建议,我将不胜感激

liquibase
2个回答
1
投票

我使用的 liquibase 实现是基于 XML 的,演示代码片段如下所示;调用而不是执行。

...
<changeSet id="Umpity-Fratz-01" author="Myself">
    <sql splitStatements="true" stripComments="false">
        <![CDATA[
            CALL Owner.Procedure(p_Parameter_01 => 'xyz');
        ]]>
    </sql>    
</changeSet>
....

0
投票

添加与 SQLcl (23.4.0) 中的 liquibase 配合使用的 YAML 变更日志:

  databaseChangeLog:
  - changeSet:
      id: 107b1d1a-1
      author: silverback-robot
      comment: Some comment that describes the action
      runAlways: true
      changes:
      - sql:
          dbms: oracle
          endDelimiter: ;
          sql: call MY_PACKAGE.MY_PROCEDURE('MY_SCHEMA','MY_TABLE')

使用

call
也对我有用,而
exec
引发了 ORA 错误。

© www.soinside.com 2019 - 2024. All rights reserved.