从PL-SQL获取受影响的行

时间:2011-08-17 11:11:26

标签: oracle plsql odp.net

我正在使用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:无效字符错误”。

请告诉我如何让受影响的行回来。万分感谢。

3 个答案:

答案 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