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;
答案 0 :(得分:0)
您看到的结果正是您想要执行的注释掉的UPDATE语句。在更新的情况下,您可以使用单个更新语句替换循环:
UPDATE POD_PLACE_WAREHOUSE_MAPPING_TB
SET WH_ID = l_warehouse_list(l_warehouse_list.LAST).WH_ID
WHERE PLACE_ID = p_PLACE_ID
上面的循环和UPDATE语句将产生完全相同的结果。在循环的情况下,您将使用l_warehouse_list中的每个值一个接一个地更新POD_PLACE_WAREHOUSE_MAPPING_TB中的所有行。当循环完成时,POD_PLACE_WAREHOUSE_MAPPING_TB中具有PLACE_ID = p_PLACE_ID的所有行都将其WH_ID列设置为来自具有最高索引的l_warehouse_list元素的WH_ID值。
我不知道你期待的其他结果。我认为你需要重新考虑一下你在做什么。
祝你好运。