[在C#中使用SELECT插入表时出现Oracle错误

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

我正在尝试使用SELECT插入表中,然后检索插入记录的ID。

当我将查询复制/粘贴时,减去其ID检索部分,到SQL Developer中,它可以正常工作。所以ID检索部分出了问题,我看不到问题。

这是我在SQL开发人员中使用的内容,它插入:

INSERT INTO TABLE1 (TABLE1_ID,COL1, COL2, ..., COLn) 
SELECT 0, COL1, COL2, ..., COLn, 
FROM TABLE2 
WHERE SOME_ID = 16; 

C#中的相同查询,带有ID检索部分:

int iOutID = -1;

string sQuery = "INSERT INTO TABLE1 (TABLE1_ID,COL1, COL2, ..., COLn) " + 
"SELECT 0, COL1, COL2, ..., COLn, " +
"FROM TABLE2 " +
"WHERE SOME_ID = 16 " +
"RETURNING TABLE1_ID INTO :OutID";

dbContext.Open();
List<OracleParameter> spParams = new List<OracleParameter>();
OracleParameter outParam = new OracleParameter("OutID", OracleDbType.Decimal, System.Data.ParameterDirection.Output);
spParams.Add(outParam);
dbContext.ExecuteOraNonQuery(sQuery, spParams, ref iOutID);
iOutID= int.Parse(outParam.Value.ToString());

引发异常

"ORA-00933: SQL command not properly ended".

更新

根据建议使用修改后的查询以使用第一行:

string sQuery = "INSERT INTO TABLE1 (TABLE1_ID,COL1, COL2, ..., COLn) " + 
"SELECT 0, COL1, COL2, ..., COLn FROM ("
"SELECT 0, COL1, COL2, ..., COLn, " +
"FROM TABLE2 " +
"WHERE SOME_ID = 16 " +
"ORDER BY Some_Date DESC) " +
"WHERE ROWNUM = 1 " +
"RETURNING TABLE1_ID INTO :OutID";
c# sql-insert oracle12c
1个回答
0
投票

我认为是因为您的第一个示例可以插入多行。

一旦您说您只想返回一个ID,就会变成错误-Oracle有助于防止您编写错误的SQL。

ROWNUM = 1添加到WHERE子句有帮助吗?

© www.soinside.com 2019 - 2024. All rights reserved.