如果可能的话,我想将以下PL / SQL语句优化为单个SELECT+UPDATE
SQL语句。
--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;
问题是我需要在同一个UPDATE
的{{1}}子句中使用WHERE
的{{1}}子句的部分结果。从概念上讲,我想首先UPDATE
SET
中的所有ID。然后使用SELECT
字符串查看它是否包含在PairTable
中。然后将Key
字符串(与前面提到的UpdatableTable
字符串相对应)设置为Value
的{{1}}。
答案 0 :(得分:1)
至少在PLSQL中使用FORALL
。
答案 1 :(得分: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);