Oracle 使用收集错误更新数据,但可能插入

Oracle 使用收集错误更新数据,但可能插入,oracle,plsql,Oracle,Plsql,您看到的结果正是注释掉的UPDATE语句所说的您想要做的。在update情况下,可以使用单个update语句替换循环: create or replace function get_ware_house_branch(p_WAREHOUSE_IDS in varchar2, p_PLACE_ID in varchar2) return id_warehouse_list is l_warehouse_list id_wareh

您看到的结果正是注释掉的UPDATE语句所说的您想要做的。在update情况下,可以使用单个update语句替换循环:

create or replace function get_ware_house_branch(p_WAREHOUSE_IDS  in varchar2,
 p_PLACE_ID       in varchar2)
  return id_warehouse_list                     
 is
   l_warehouse_list id_warehouse_list := id_warehouse_list();
  str varchar2(300);

begin

  str := 'SELECT BRANCH_WAREHOUSE(w.wh_id, w.wh_name)
              FROM POD_WAREHOUSE_MASTER W
              where ( W.wh_id  IN  (' ||p_WAREHOUSE_IDS  || '))';

  execute immediate str bulk collect into l_warehouse_list;

  for i in l_warehouse_list.first..l_warehouse_list.last loop 
      dbms_output.put_line(l_warehouse_list(i).wh_id || ', ' ||  l_warehouse_list(i).wh_name);


/*update pod_place_warehouse_mapping_tb 

 set wh_id = l_warehouse_list(i).wh_id 

 where place_id =  p_PLACE_ID ;*/


insert into pod_place_warehouse_mapping_tb (id,place_id ,wh_id )
    values
 (POD_UNIQUE_VAL_SEQ.NEXTVAL    ,p_PLACE_ID,l_warehouse_list(i).wh_id);

end loop;

commit;
 return l_warehouse_list;
end;
上面的循环和UPDATE语句将产生完全相同的结果。在循环案例中,您使用l_WAREHOUSE_列表中的每个值逐个更新POD_PLACE_WAREHOUSE_MAPPING_TB中的所有行。循环完成后,POD_PLACE_WAREHOUSE_MAPPING_TB中所有具有PLACE_ID=p_PLACE_ID的行的WH_ID列将设置为具有最高索引的l_WAREHOUSE_列表元素中的WH_ID值

我不知道你还期待什么结果。我认为你需要重新思考你想做什么


祝你好运。

问题是什么?如何使用集合作为插入来更新数据,但当我更新相同的WHU id时,所有提供的位置都会被更新,但我有一个表,其中我有多个WHU id与eash place id,我需要用新的WHU id更新这些WHU id,这是可能的还是需要的要删除然后更新,我相信要做到这一点,你需要知道地点ID和旧的WHU ID,以及新的WHU ID。然后更新会变成类似于
UPDATE POD\u PLACE\u WAREHOUSE\u MAPPING\u TB SET WH\u ID=new WH\u ID WHERE PLACE\u ID=p\u PLACE\u ID和WH\u ID=old WH\u ID
。我希望这足够清楚。分享和享受。是的,我得到了你的要点B但如何实现这一点我需要选择所有具有特定地点id的地点id,然后将其初始化为集合,然后提供新的地点id…如何实现这一点我有两个表,一个表中我有所有的地点id和地点id,另一个表中我选择了地点id和地点id
UPDATE POD_PLACE_WAREHOUSE_MAPPING_TB
  SET WH_ID = l_warehouse_list(l_warehouse_list.LAST).WH_ID
  WHERE PLACE_ID = p_PLACE_ID