2011-08-17 76 views
1

我正在使用ODP.Net並運行PL/SQL命令來合併Oracle 10G數據庫中的表。 我的命令如下:從PL-SQL獲取受影響的行

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:無效的字符錯誤」。

請告訴我怎樣才能恢復受影響的行。萬分感謝。

回答

1

你可以做的一件事是把你的代碼放在一個返回%ROWCOUNT的PLSQL函數中。

然後從ODP.net調用該函數,將命令類型設置爲存儲過程,並使用ExecuteLiteral方法,該方法將返回行計數作爲可以投影爲int的對象實例。

2

您正在混淆幾件事:a MERGE語句是普通的SQL命令,而PL/SQL代碼始終由BEGIN/END(和可選的DECLARE)分隔。此外,SQL%ROWCOUNT是一個PL/SQL變量,不能在PL/SQL之外發生。

而且我不太明白你是否跑MERGESELECT語句有兩個獨立或共同ODP.NET調用。

無論如何,解決方案與ODP.NET是一致的:使用OracleCommand.ExecuteNonQuery()執行MERGE命令。此方法返回受影響的行數。

+0

呀,它返回簡單的INSERT/UPDATE語句。不適用於MERGE聲明。 – TTCG 2011-08-17 12:57:41

相關問題