我正在使用ODP.Net并运行PL / SQL命令来合并Oracle 10G数据库中的表。 我的命令如下:
MERGE INTO TestTable t
USING (SELECT 2911 AS AR_ID FROM dual) s
ON (t.AR_ID = s.AR_ID)
WHEN MATCHED THEN
UPDATE SET t.AR_VIUAL_IMPAIRMENT = 1
WHEN NOT MATCHED THEN
INSERT (AR_S_REF)
VALUES ('abcdef');
SELECT sql%ROWCOUNT FROM dual;
Merge命令成功运行并根据需要更新/插入。问题是我想知道有多少记录被更新。
当我运行上述语句时,“ORA-00911:无效字符错误”。
请告诉我如何让受影响的行回来。万分感谢。
答案 0 :(得分:2)
你混淆了一些东西: MERGE 语句是一个普通的SQL命令,而PL / SQL代码总是由BEGIN / END(和可选的DECLARE)分隔。此外,SQL%ROWCOUNT
是PL / SQL变量,不能在PL / SQL之外发生。
我不太清楚你是否使用两个独立或通用的ODP.NET调用来运行 MERGE 和 SELECT 语句。
无论如何,使用ODP.NET解决方案是直接使用:使用OracleCommand.ExecuteNonQuery()
执行 MERGE 命令。此方法返回受影响的行数。
答案 1 :(得分:1)
您可以做的一件事是将您的代码放在一个返回%ROWCOUNT的PLSQL函数中。
然后从ODP.net调用此函数将命令类型设置为存储过程,并使用ExecuteLiteral
方法将行计数返回给您作为对象实例,您可以将其转换为int。
答案 2 :(得分:1)
无法仅返回“已更新”的行数。
(如前所述,行数是受影响(插入和更新)行的数量)
对于问汤姆有一个很好的讨论:http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:122741200346595110