2013-12-18 76 views
1

我有一个SQL文件,带有作为SQL脚本运行的DML触发器创建。但是,我想将其包含在我的Grails数据库迁移变更日志中。我使用changelog(使用sqlFile标签)运行所有其他SQL脚本。当我用我的触发器sql文件做同样的过程时,我得到各种无效的sql语句错误(“end;”上的无效sql语句)。Grails迁移插件创建触发器

由于触发器的PL/SQL特性,是否有问题?如果是这样,我该如何解决这个问题?

这说明我试图运行的类型:

CREATE OR REPLACE TRIGGER "A_HST" 
    BEFORE 
     delete or update 
     on TableA 
    for each row 
     begin 
      insert into A_history 
      (ID, 
      VERSION, 
      COMMENTS, 
      description, 
      NAME, 
      UPDATEDBY_ID) 
    values 
    (:old.id, 
     :old.VERSION, 
     :old.comments, 
     :old.description, 
     :old.name, 
     :old.UPDATEDBY_ID); 
    end; 

/

ALTER TRIGGER “A_HST” ENABLE;

回答

1

也许您的分隔符有问题?看看endDelimiter属性http://www.liquibase.org/documentation/changes/sql_file.html

您可以将endDelimiter设置为';;'并确保CREATE TRIGGER语句后面跟着';;'

+0

我会看看分隔符。我注意到,dbm-update运行sql文件的方式与通过sqlplus或Toad/SQLDeveloper运行它们不同。有时候我会遇到sqlplus的错误,我没有用dbm-update得到......这很奇怪,但我会尝试使用分隔符的想法,并让它知道它是否有效。 –

+0

我试过这种方法(将endDelimiter设置为';;'并将所有单个';'替换为';;'。触发器会放入数据库中,但是由于它们缺少' ;'结束语句... –

+0

这对我有效 - 我设置了endDelimiter =“#”并在我的触发器脚本中使用了分号作为行结尾 – rcgeorge23