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;
发布于 2014-05-22 19:39:45
您看到的结果正是被注释掉的UPDATE语句告诉您要做的事情。在update情况下,您可以用一条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值。
我不知道你还想要什么结果。我认为你需要重新思考你想要做的是什么。
祝你好运。
https://stackoverflow.com/questions/23800402
复制相似问题