我有一个函数,我在其中使用批量绑定并使用in运算符传递多个i / p参数它没有绑定

时间:2014-05-10 03:23:38

标签: plsql

create or replace type branch_warehouse as object (wh_id number,wh_name varchar2(100))

create or replace type id_warehouse_list as table of branch_warehouse

function get_ware_house_branch(p_BRANCH_IDS 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.BRANCH_ID  IN  (:'|| p_BRANCH_IDS||'))';

  execute immediate str bulk collect into l_warehouse_list using  p_BRANCH_IDS; 

  return l_warehouse_list;

端;

如果我使用= i的单个i / p参数:它被绑定,请指导

1 个答案:

答案 0 :(得分:1)

按如下方式重写您的功能:

function get_ware_house_branch(p_BRANCH_IDS 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.BRANCH_ID  IN  (' || p_BRANCH_IDS || '))';

  execute immediate str bulk collect into l_warehouse_list; 

  return l_warehouse_list;
end;

这似乎运作正常(见this SQLFiddle)。

我所做的唯一改变是我之前评论中提出的那些 - ":"已从SQL字符串中删除,using p_BRANCH_IDS已从EXECUTE IMMEDIATE中删除。

分享并享受。