我有 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 异常 {"ORA-00911: invalid character"}
。
我的数据库是 Oracle db。
有什么问题?
最佳答案
要将 Oracle 的语句一起批处理,您需要将其包含在 BEGIN...END block 中。在您在评论中链接到的最后一个示例中,您在第二个语句之后和 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 记录一个问题
关于c# - 使用 fluentmigrator 运行 sql 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14672476/