2013-01-23 36 views
0

如果可能,我想優化以下PL/SQL語句到單個SELECT+UPDATE SQL語句。將FOR..LOOP中的多個UPDATE轉換爲單個SELECT/UPDATE語句

--Key is a VARCHAR2, Value is a CLOB 
FOR Pair IN (select Key, Value from PairTable) 
LOOP   
    update UpdatableTable 
    set CLOBColumn = CLOBColumn || Pair.Value 
    where ID in 
    (select ID from UpdatableTable 
    where CONTAINS("indexedcolumns", '{' || Pair.Key || '}') > 0); 
    commit; 
END LOOP; 

的問題是,我需要小號SET條款「一樣UPDATE以s WHERE條款」使用結果的一部分從UPDATE。從概念上講,我想要SELECT中的所有ID都在PairTable。然後使用Key字符串查看它是否包含在UpdatableTable中。然後將Value字符串(對應於上述Key字符串)設置爲UpdatableTableCLOBColumn

回答

1

至少在PLSQL中使用FORALL

0
you can use the below update statements 

update UpdatableTable 
    set CLOBColumn = CLOBColumn || Value from PairTable 
    where ID in 
    (select ID from UpdatableTable 
    where CONTAINS("indexedcolumns", '{' || Pair.Key || '}') > 0); 

or 

update UpdatableTable 
    set CLOBColumn = CLOBColumn || b.Value from (select Key, Value from PairTable) b 
    where ID in 
    (select ID from UpdatableTable 
    where CONTAINS("indexedcolumns", '{' || Pair.Key || '}') > 0); 
+0

除了獲得「SQL錯誤:ORA-00933:SQL命令未正確結束」之外,我不確定是否設置了正確的「值」。它應該和'WHERE'子句中的'Key'具有相同的ID。 – Howie

+0

它可能與CONTAINS子句一起,檢查CONTAINS索引如何使用的語法。 – Dileep

相關問題