【问题标题】:Get the Affected Row from PL-SQL从 PL-SQL 获取受影响的行
【发布时间】:2011-10-28 20:14:44
【问题描述】:

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

请告诉我如何恢复受影响的行。谢谢百万。

【问题讨论】:

    标签: oracle plsql odp.net


    【解决方案1】:

    您混淆了一些事情:MERGE 语句是一个普通的 SQL 命令,而 PL/SQL 代码总是由 BEGIN/END(和可选的 DECLARE)分隔。此外,SQL%ROWCOUNT 是一个 PL/SQL 变量,不能出现在 PL/SQL 之外。

    我不太明白您是使用两个单独的 ODP.NET 调用还是一个普通的 ODP.NET 调用来运行 MERGESELECT 语句。

    无论如何,使用 ODP.NET 的解决方案是直接的:使用 OracleCommand.ExecuteNonQuery() 执行 MERGE 命令。该方法返回受影响的行数。

    【讨论】:

    • 是的,它返回简单的 INSERT/UPDATE 语句。不适用于 MERGE 语句。
    【解决方案2】:

    您可以做的一件事是将代码放入返回 %ROWCOUNT 的 PLSQL 函数中。

    然后从 ODP.net 调用此函数,将命令类型设置为存储过程并使用 ExecuteLiteral 方法将行数作为对象实例返回给您,您可以将其转换为 int。

    【讨论】:

      【解决方案3】:

      不可能只返回“更新”的行数。

      (如前所述,行数是受影响(插入和更新)的行数)

      关于问汤姆有一个很好的讨论:http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:122741200346595110

      【讨论】:

        猜你喜欢
        • 2010-10-26
        • 1970-01-01
        • 2012-10-01
        • 2011-10-03
        • 1970-01-01
        • 2013-06-23
        • 2015-08-06
        • 2011-06-11
        • 2016-11-01
        相关资源
        最近更新 更多