[英]run sql scripts with fluentmigrator
我有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 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记录问题
现在,我不仅使用BEGIN和END语句,还使用EXECUTE IMMEDIATE进行CREATE 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.