我正在尝试在NHibernate中实现“如果存在,更新,否则,插入”数据访问方法。我的数据库是Oracle 10g。
尝试运行此代码时,出现“无法执行本地批量操作查询”错误,如果我单独运行插入或更新,则工作正常。
谢谢!
string sql = @"DECLARE
CntOfRow Number(10,0);
BEGIN
SELECT count(*)
INTO CntOfRow
FROM Table1
WHERE
QueID=:QueID
IF CntOfRow=0 THEN
INSERT INTO Table1 ...;
ELSE
UPDATE Table1 ... ;
END IF;
END;";
INHibernateSession session = NHibernateSessionManager.Instance.Session;
try
{
session.BeginTransaction();
ISQLQuery query = session.GetISession().CreateSQLQuery(sql.Replace(System.Environment.NewLine, " "));
query.SetParameter("QueID", queID);
query.ExecuteUpdate();
session.CommitTransaction();
}
catch (Exception ex)
{
session.RollbackTransaction();
throw;
}
最佳答案
您似乎在;
之后缺少SELECT
This link也可能会让您感兴趣。
关于插入/更新,请参见MERGE语句。它是这样的:
MERGE INTO t1 dest
USING (SELECT 1 pk, 11 i FROM dual) src
ON (dest.pk = src.pk)
WHEN NOT MATCHED THEN INSERT (dest.pk, dest.i) VALUES (src.pk, src.i)
WHEN MATCHED THEN UPDATE SET dest.i = src.i;
另请参阅this topic
关于oracle - 无法执行 native 批量操作查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1709481/