有时您只想通过迭代固定内容来添加许多测试行。如果您的数据库已经有一些行,然后需要更新,那么您要寻找的是UpSert(更新或插入)操作。
这是一个示例,如何在Oracle SQL中执行此操作,而无需创建临时表:
begin
for i in (select * from table(sys.dbms_debug_vc2coll('1234','5678')))
loop
merge into my_target_table target
using (
select i.COLUMN_VALUE as acc_no,
'N' as static_val,
'1' as another_static_field
from dual
) temp on (target.acc_no = temp.acc_no)
when matched then
update set target.MY_FIELD_TO_UPDATE = temp.static_val, target.SECOND_FIELD = temp.another_static_field
when not matched then
insert values (temp.acc_no, temp.static_val, temp.another_static_field);
end loop;
end;
/
本语法的所有部分都是必要的,包括结尾 /表示匿名PL / SQL代码块的末尾,因此您可以在例如中执行它。松鼠sql。
sys.dbms_debug_vc2coll('1234','5678')
此呼叫输出您需要循环的任何数据列表
from dual
使用特殊双表关键字,我们不必创建一个表即可保存我们的静态数据,它将仅在内存中
when matched then
匹配的指令允许我们执行UPSERT操作(在现有时进行更新,插入新时插入)
i.COLUMN_VALUE
特别注意.column_value字段,这是Oracle允许我们访问通过