在oracle中如何调用包中声明的自定义函数

cainiao66 2011-12-14 10:02:29
FUNCTION fn_split(pi_str In Varchar2, pi_separator In Varchar2)
RETURN t_Array IS

idx Number;
currentindex Number := 1;
strs t_Array;
v_str varchar2(4000) := pi_str;
BEGIN

IF pi_str IS NOT NULL AND pi_separator IS NOT NULL THEN
--存在分隔符

END IF;
IF v_str IS NOT NULL THEN
strs(currentindex) := v_str;
END IF;
Return strs;
END fn_split;

这个自定义函数放在packages内了,没放在fuctions内,在pl/sql developer中如何调用
试了半天报语法错误
select commonpackages.fn_split('sdsd,sdsd,sdsd,sdsaasdf',',') from dual;
Select * from emp where ename=commonpackages.fn_split('sdsd,sdsd,sdsd,sdsaasdf',',');

刚接触oralce不好意思
...全文
315 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangdh12 2011-12-14
  • 打赏
  • 举报
回复
应该是 t_Array 并不是oracle能够辨别的类型。
huangdh12 2011-12-14
  • 打赏
  • 举报
回复
普通的函数 select commonpackages.fn_split('sdsd,sdsd,sdsd,sdsaasdf',',') from dual;这样应该是可以调用的
只是你的返回是列表 就没有试过了。 报什么错啊?
cainiao66 2011-12-14
  • 打赏
  • 举报
回复
declare
ret commonpackages.t_Array;

begin
ret:=Commonpackages.fn_split('7902,sdf,sdfa23,sdf',',');

for i in 1 .. ret.count loop
dbms_output.put_line(ret(i));
end loop;
end;

试了半天,终于让我试出来了
cainiao66 2011-12-14
  • 打赏
  • 举报
回复
包名叫commonpackages
cainiao66 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huangdh12 的回复:]

应该是 t_Array 并不是oracle能够辨别的类型。
[/Quote]
嗯,主要是这个原因,像二楼那样就没问题了

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧