2015-11-04 33 views
0

我需要更新表中的兩個字段以及包含Oracle Server(11g)上的該表的每個模式的值。我來自SQL Server世界,但是認識到這種體系結構與單個實例下的多個模式不同,而不是單個實例下的多個數據庫。此更新的原因是爲了確保在客戶端數據庫副本上進行數據庫開發和測試時,客戶端不會意外接收電子郵件(根據每個模式/數據庫中某個表的某些列中定義的設置)。如何更新Oracle服務器上每個模式中找到的表中的字段值

我正在使用SQL Developer,但也可以應用SQLplus。假設服務器名稱是「myServer」,表名是「myTable」,這個表的字段是「Field1」和「Field2」,有人可以幫助提供一些SQL來執行myServer設置上的所有模式的全局更新Field1 ='N'和Field2 = NULL在myTable中?或者直接給我一個能夠回答這個問題的鏈接?我第一次跑了多次搜索,什麼也沒找到。

感謝

+0

可能的重複[如何通過不同模式循環並執行一些sql?](http://stackoverflow.com/questions/5297268/how-to-loop-through-diferent-schemas-and-execute- some-sql-on-each) – doublesharp

+0

這很接近,但含糊不清所需的細節在問題中討論。應用CTE的答案擊中了頭部。感謝您提供鏈接。 – user3662215

回答

1

您可以使用動態SQL

FOR tbl IN (SELECT owner, table_name 
       FROM dba_tables 
      WHERE table_name = 'MYTABLE') 
LOOP 
    EXECUTE IMMEDIATE 'update ' || tbl.owner || '.' || tbl.table_name || 
        ' set field1 = ''N'', ' || 
        '  field2 = null '; 
END LOOP; 

您可以添加一些額外的日誌記錄,你可能想建立的SQL語句中的局部變量,這樣您就可以登錄,如果出了差錯。這也假設您以可以訪問dba_tables的用戶身份運行。如果要使用有權訪問的名稱(可能不包括數據庫中的每個表)更新每個表,則可以使用all_tables

+0

謝謝!這工作完美。對不起,由於延遲迴復,我在上週四和週五不在辦公室。 – user3662215

相關問題