Обновление данных записей с использованием Oracle 10g DB и VB.net - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь выяснить, как получить вывод о том, какие записи были обновлены при выполнении этого запроса:

UPDATE   CSR.TARGET ces 
SET      (STATUS_CODE, COMPLETE_DATE, DATA) = 
     (SELECT    'ERROR', '', REPLACE(c.Data, ' x</csr', '</csr') 
     FROM       CSR.TARGET C 
     WHERE      (c.EID = ces.EID) 
     AND        c.STATUS_CODE = 'ERROR') 
WHERE    EXISTS (SELECT 1 
FROM     CSR.TARGET C 
WHERE    (c.EID = ces.EID) 
AND      c.STATUS_CODE = 'ERROR')

Если есть 3 записи, которые были обновлены этим запросом, то я хотел бызнать, что они были (ID записи и т. д.).Как бы я поступил так?

В настоящее время он просто сообщает мне, что 3 записи были обновлены, и это все.Никаких других подробностей.

Любая помощь будет отличной!Спасибо: o)

ОБНОВЛЕНИЕ

Мне нужно это для запроса с использованием VB.net, так что я не думаю, что я могу делать вещи типа PL / SQL?

    Dim OracleCommand As New OracleCommand()
    Dim ra As Integer

    OracleCommand = New OracleCommand("UPDATE   CSR.TARGET ces " & _
                                      "SET      (STATUS_CODE, COMPLETE_DATE, DATA) = " & _
                                                "(SELECT    'ERROR', '', REPLACE(c.Data, ' x</csr', '</csr') " & _
                                                "FROM       CSR.TARGET C " & _
                                                "WHERE      (c.EID = ces.EID) " & _
                                                "AND        c.STATUS_CODE = 'ERROR') " & _
                                      "WHERE    EXISTS (SELECT 1 " & _
                                      "FROM     CSR.TARGET C " & _
                                      "WHERE    (c.EID = ces.EID) " & _
                                      "AND      c.STATUS_CODE = 'ERROR')", OracleConnection)

    Try
        ra = OracleCommand.ExecuteNonQuery()
        OracleConnection.Close()
 ....

Дэвид

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Вы должны быть в состоянии использовать предложение RETURNING. Предполагая, что столбец EID является «идентификатором записи», на который вы ссылаетесь, и что он числовой

CREATE OR REPLACE TYPE num_tbl
IS 
TABLE OF NUMBER;

DECLARE
  l_modified_eids num_tbl;
BEGIN
  UPDATE csr.target ces
     SET <<omitted>>
   WHERE <<omitted>>
   RETURNING eid
     BULK COLLECT INTO l_modified_eids;

  <<Iterate through l_modified_eids to see which rows are modified>>
END;
0 голосов
/ 22 марта 2011

Исходя из того, что я прочел этот запрос, все записи с EID, совпадающим с EID записи с кодом состояния 'ERROR', будут обновлены. Так что если у вас есть такая таблица:

ID   EID  STATUS_CODE
--   ---  -----------
 1     1    ERROR
 2     1    OKAY
 3     2    OKAY

обе записи с ID 1 и 2 будут обновлены, потому что поле EID 2 соответствует полю EID 1, а поле EID 1 показывает ошибку. Когда он обновляется, он всегда использует данные из строки с «ОШИБКОЙ».

...