Получить затронутую строку из PL-SQL - PullRequest
1 голос
/ 17 августа 2011

Я использую 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 ]

2 голосов
/ 17 августа 2011

Вы перепутали несколько вещей: оператор MERGE - это простая команда SQL, в то время как код PL / SQL всегда ограничивается BEGIN / END (и необязательным DECLARE). Кроме того, SQL%ROWCOUNT - это переменная PL / SQL, которая не может встречаться вне PL / SQL.

И я не совсем понимаю, выполняли ли вы операторы MERGE и SELECT с двумя отдельными или общими вызовами ODP.NET.

В любом случае, решение является простым с ODP.NET: выполните команду MERGE с OracleCommand.ExecuteNonQuery(). Этот метод возвращает количество затронутых строк.

1 голос
/ 17 августа 2011

Невозможно вернуть только "обновленное" количество строк.

(как уже упоминалось, количество строк - это количество затронутых (вставленных и обновленных) строк)

естьхорошая дискуссия о том, чтобы спросить: http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:122741200346595110

1 голос
/ 17 августа 2011

Одна вещь, которую вы могли бы сделать, это поместить свой код в функцию PLSQL, которая возвращает% ROWCOUNT.

Затем вызовите эту функцию из ODP.net, установив тип команды для хранимой процедуры и используя метод ExecuteLiteral, который вернет вам количество строк в качестве экземпляра объекта, который вы можете привести к типу int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...