2013-08-21 43 views
0

編寫一個過程,我必須使用「where字段IN(SET)」條件進行更新。我想用下面的查詢從表中檢索此「SET」:將選擇存儲到一個變量中,以便將來在過程中使用

SELECT WM_CONCAT(fieldX) FROM TableX WHERE .... ; 

我想這個選擇保存到一個變量和以後使用它的「裏田(SET)」條件。喜歡的東西:

UPDATE TABLEY SET ... WHERE fieldX IN (Variable); 

現在IM當我嘗試做一個選擇與得到這個錯誤的情況像我想的更新:

ORA-00932: inconsistent datatypes: expected - got CLOB 
    00932. 00000 - "inconsistent datatypes: expected %s got %s" 

Thx提前。

回答

0

嘗試

UPDATE TABLEY y 
    SET ... 
WHERE y.fieldX IN (
      SELECT x.fieldX FROM TableX x WHERE .... 
     ) 
    ; 
+0

再說,我不喜歡做一個選擇,每更新時,它是相同的數據。有什麼辦法可以將這個選擇存儲到一個變量中以備後用,以防止重複同一個查詢一遍又一遍嗎?謝謝。 – Negashion

+0

請注意,數據庫表中實際上是一種保存數據的變量,供以後使用。因此您可以利用臨時表進行會話內存儲。另一種方式是plsql colleciton數據結構,其中大部分映射到表。除非您可以確定底層數據在連續調用之間不會發生變化,否則您可能會更好地重複查詢。 – collapsar

1

與XMLTABLE嘗試,

UPDATE TABLEY y 
SET ... 
WHERE y.fieldX IN(SELECT (COLUMN_VALUE).getNumberVal() 
        FROM xmltable(Variable)); 
+0

我想避免對每個更新進行查詢。這就是爲什麼我想將選擇存儲在變量中的原因。謝謝 – Negashion

相關問題