5

我有 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 数据库。

有什么问题?

4

2 回答 2

5

要为 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记录一个问题

于 2013-02-03T17:48:45.170 回答
1

现在我不仅使用 BEGIN 和 END 语句,还使用 ​​EXECUTE IMMEDIATE 来创建 ALTER 和 DROP。对于 INSERT,我只使用 BEGIN 和 END。

BEGIN 
EXECUTE IMMEDIATE'CREATE TABLE TESTTABLE1 
( 
  ID_TESTTABLE1          NUMBER (18) NOT NULL, 
  TESTTABLE_VALUE1       NUMBER (18), 
  TESTTABLE_KEY1       NUMBER (18) 
)'; 
EXECUTE IMMEDIATE 'CREATE TABLE TESTTABLE 
( 
  ID_TESTTABLE          NUMBER (18) NOT NULL, 
  TESTTABLE_VALUE      NUMBER (18), 
  TESTTABLE_KEY      NUMBER (18) 
)';
END;
于 2013-02-03T18:31:49.363 回答