Как получить обновленный ряд первичного ключа без хранимой процедуры - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть ситуация, когда мне нужно получить первичный ключ обновленных строк в простом операторе обновления.Я нашел предложение «RETURNING INTO» от Oracle, но не смог найти способ извлечь все первичные ключи из обновленных строк, используя C #, без создания хранимой процедуры.Логика довольно проста: обновите некоторые строки, получите их идентификаторы, чтобы несколько потоков работали с несколькими наборами обновленных строк.Можно ли добиться?

1 Ответ

0 голосов
/ 26 сентября 2019

Вам не нужно создавать хранимую процедуру, но она не будет работать с простым оператором обновления.вам нужно по крайней мере что-то вроде этого как выражение:

DECLARE t_ids id_array;
BEGIN
UPDATE table
SET field1 = :value
WHERE field2 = :searchFor
RETURNING key_column BULK COLLECT INTO t_ids;

OPEN :rcursor FOR SELECT * FROM TABLE(cast(t_ids as id_array));
END;

Это вернет курсор ref, который вы могли бы обработать в c #

OracleCommand command = new OracleCommand("<the sql query above>", connection);
command.BindByName = true;

// Add the parameters for update statement
// ...

// Add the out parameter for the ref cursor
OracleParameter refCursor = new OracleParameter("rcursor", OracleDbType.RefCursor);
refCursor.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(returnCursor);

var reader = command.ExecuteReader();

OracleDataAdapter dataAdapter = new OracleDataAdapter(command);
DataTable dt = new DataTable();
dataAdapter.Fill(dt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...