在静态内容上循环以升至Oracle SQL中的许多行
#编程 #sql #oracle #database

有时您只想通过迭代固定内容来添加许多测试行。如果您的数据库已经有一些行,然后需要更新,那么您要寻找的是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允许我们访问通过

循环的每个单个值的方式