oracle sql 调用 自定义函数时出错

xzhang148 2011-10-01 08:35:34
写了个简单的pl/sql function, foo(t_id) 查询 table B 返回 一个varchar2 的值


邪门的是
select id, empname, foo(id)
from table_A
where id in ('id1234xyz','idasdf6789') --id 是random.string生成的混合码

能正常出结果 (表A的ID是pk,同时是表B的fk)foo(id)就是查询表B,合并一个描述项然后return


但是应用到全表

select id, empname, foo(id)
from table_A

就不成了,出错,说是call function无结果

好像是select 语句不知道怎么处理表A的id 并且pass到function里


试过用 cast(id as varchar2(20))什么的都不管用,其实那个id本身是字符串,不应该啊……


select id, empname, foo(name)
from table_A

故意用错误的列去,还能有点返回,说找不到记录(函数里面有错误处理,找不到就返回说没有这个ID),不是那种call function无结果的系统错……

真是奇怪极了

拜托拜托,帮忙想想
...全文
126 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xzhang148 2011-10-04
谢谢,原表有遗留测试数据导致 ora-6502 我写了exception,把sqlcode打印出来发现的,问题解决了
回复
xzhang148 2011-10-02
谢谢大家帮忙,可能是函数和数据都有点问题,俺再试试……
回复
我本是朱 2011-10-01

select t.deptno, t.dname, fun_test(t.deptno) sal_list from scott.dept t;
--------------------
1 10 ACCOUNTING |0|2450|5000|1300
2 20 RESEARCH |800|2975|3000|1100|3000
3 30 SALES |1600|1250|1250|2850|1500|950
4 40 OPERATIONS The result is null!

plsql测试的主外键的情况都可以
function 代码 贴出来
回复
xzhang148 2011-10-01
肯定不是
函数里有 id_in is null return 'id is null',找不到return "no desc"的处理

试过select id, empname, foo(name)
老老实实返回 id,naem,"no desc"

不是那种系统错 说是call 函数无返回 请改正函数的提示
回复
xiaobluesky 2011-10-01
怀疑是不是由于你foo(id)内部找不到数据报错,报错导致的..

foo函数内部异常处理返回空字符串看看..

table B 表里面的数据就留几条A表里面存在的的数据看看,是不是还报错..
回复
jimmylin040 2011-10-01
在function做异常处理

EXCEPTION
WHEN NOT_DATA_FOUND THEN
RETRUN 'NOT DATA'
WHEN OTHERS THEN
RETURN 'ERROR'
回复
hlw_cn 2011-10-01
你写的函数是不是存在返回多个值的情况啊?
回复
相关推荐
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2011-10-01 08:35
社区公告
暂无公告