我尝试在实体框架
update-database
命令期间读取SQL文件:
public override void Up()
{
this.SqlResource("Migrations.SqlMigrations.ImportData.sql");
}
Update-Database -SourceMigration 0 -StartUpProjectName Test
读取工作正常,但随后出现上述错误。我知道 C# 中的
;
分号有一些棘手的行为,并且它不像在 Oracle SQL Developer 中那样工作。
这是我的 SQL 文件中的代码:
INSERT ALL
INTO PLZ (PLZ_PK, PLZ, LOCATION, CREATION_DATE, CREATED_BY)
VALUES ('1', '111111', 'Testcity1', to_timestamp('15.12.09 09:15:00,000000000'), 'Init Dateimport')
INTO PLZ (PLZ_PK, PLZ, LOCATION, CREATION_DATE, CREATED_BY)
VALUES ('2', '222222', 'Testcity2', to_timestamp('15.12.09 09:15:00,000000000'), 'Init Dateimport')
...
..
.
SELECT * FROM dual
COMMIT
INSERT ALL
INTO PLZ (PLZ_PK, PLZ, LOCATION, CREATION_DATE, CREATED_BY)
VALUES ('3', '333333', 'Testcity3', to_timestamp('15.12.09 09:15:00,000000000'), 'Init Dateimport')
...
..
.
SELECT * FROM dual
点 (...) 不在文件中,我只是用它们来表示在提交之间有 500 行。使用
INSERT ALL
拆分 COMMIT
语句在 Oracle SQL Developer 中工作正常,我没有收到错误
PL/SQL:ORA-00913:值太多
这通常会发生。
在 Oracle 中,每条命令只能使用一条语句。
如果您的代码正在读取 SQL 文件并通过单个命令将其完整传递给 Oracle,那么您将收到语法错误。 (如果您的代码被传递到预处理器,该预处理器会将其分成单独的语句,那么您需要查阅该预处理器的文档)。
您需要:
BEGIN
INSERT ALL
INTO PLZ (PLZ_PK, PLZ, LOCATION, CREATION_DATE, CREATED_BY)
VALUES ('1', '111111', 'Testcity1', to_timestamp('15.12.09 09:15:00,000000000'), 'Init Dateimport')
INTO PLZ (PLZ_PK, PLZ, LOCATION, CREATION_DATE, CREATED_BY)
VALUES ('2', '222222', 'Testcity2', to_timestamp('15.12.09 09:15:00,000000000'), 'Init Dateimport')
-- ...
-- ..
-- .
SELECT * FROM dual;
INSERT ALL
INTO PLZ (PLZ_PK, PLZ, LOCATION, CREATION_DATE, CREATED_BY)
VALUES ('3', '333333', 'Testcity3', to_timestamp('15.12.09 09:15:00,000000000'), 'Init Dateimport')
-- ...
-- ..
-- .
SELECT * FROM dual;
COMMIT;
END;