ORA-00933:使用实体框架在 C# 中 SQL 命令未正确结束(使用提交插入所有)

问题描述 投票:0回答:1

我尝试在实体框架

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:值太多

这通常会发生。

c# oracle entity-framework
1个回答
0
投票

在 Oracle 中,每条命令只能使用一条语句。

如果您的代码正在读取 SQL 文件并通过单个命令将其完整传递给 Oracle,那么您将收到语法错误。 (如果您的代码被传递到预处理器,该预处理器会将其分成单独的语句,那么您需要查阅该预处理器的文档)。

您需要:

  • 将其拆分为单独的 DML 语句(不需要尾随分号);或
  • 将其包装在 PL/SQL 块中(需要尾部分号作为 SQL 语句终止符,但不希望尾部斜杠作为 PL/SQL 语句终止符):
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;
© www.soinside.com 2019 - 2024. All rights reserved.