我有SQL脚本:

CREATE TABLE TESTTABLE1(
   ID_TESTTABLE1          NUMBER (18) NOT NULL,
   TESTTABLE_VALUE1       NUMBER (18),
   TESTTABLE_KEY1       NUMBER (18))


并使用Fluentmigrator:

[Migration(201302021800)]
public class Migration_201302021800 : AutoReversingMigration
{
    public override void Up()
    {
        var url = @"Update_1.0.0.5.sql";
        Execute.Script(url);
    }
}


它成功执行,并且如果我添加一些SQL:

CREATE TABLE TESTTABLE1
(
  ID_TESTTABLE1          NUMBER (18) NOT NULL,
  TESTTABLE_VALUE1       NUMBER (18),
  TESTTABLE_KEY1       NUMBER (18)
);
CREATE TABLE TESTTABLE
(
  ID_TESTTABLE          NUMBER (18) NOT NULL,
  TESTTABLE_VALUE      NUMBER (18),
  TESTTABLE_KEY      NUMBER (18)
);


在Fluentmigrator中执行失败,并带有Oracle exeption {"ORA-00911: invalid character"}

我的数据库是Oracle db。

有什么问题?

最佳答案

要一起为Oracle批处理语句,您需要将其放在BEGIN ... END块中。在您在注释中链接的上一个示例中,第二个语句之后和END关键字之前缺少分号。

BEGIN
CREATE TABLE TESTTABLE1
    (
      ID_TESTTABLE1          NUMBER (18) NOT NULL,
      TESTTABLE_VALUE1       NUMBER (18),
      TESTTABLE_KEY1       NUMBER (18)
    );
CREATE TABLE TESTTABLE
    (
      ID_TESTTABLE          NUMBER (18) NOT NULL,
      TESTTABLE_VALUE      NUMBER (18),
      TESTTABLE_KEY      NUMBER (18)
    );
END;


尽管在这种情况下FluentMigrator可以提供更好的支持。例如,当FluentMigrator处理来自Sql Server的多语句脚本时,它将拆分该脚本并执行每个语句(https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator.Runner/Processors/SqlServer/SqlServerProcessor.cs#L197-236)。因此,我建议将问题记录在https://github.com/schambers/fluentmigrator/issues

10-06 02:49