使用Oracle 10g DB和VB.net更新记录详细信息

时间:2011-03-22 15:37:15

标签: oracle visual-studio-2010 oracle10g sql-update

我正在试图弄清楚如何获得运行此查询时更新了哪些记录的输出:

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 个答案:

答案 0 :(得分:1)

您应该能够使用RETURNING子句。假设EID列是您所指的“记录ID”并且它是数字

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;

答案 1 :(得分:0)

根据我对该查询的读取,所有具有与status_code为“ERROR”的记录的EID相匹配的EID的记录都将被更新。所以如果你有这样的表:

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

ID 1和2的两个记录都会更新,因为2的EID字段与1的EID字段匹配,1的EID字段显示错误。更新时,它总是使用“ERROR”行中的数据。