写了个简单的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无结果的系统错……真是奇怪极了拜托拜托,帮忙想想

解决方案 »

  1.   

    怀疑是不是由于你foo(id)内部找不到数据报错,报错导致的..foo函数内部异常处理返回空字符串看看..table B 表里面的数据就留几条A表里面存在的的数据看看,是不是还报错..
      

  2.   

    肯定不是 
    函数里有 id_in is null return 'id is null',找不到return "no desc"的处理试过select id, empname, foo(name) 
    老老实实返回 id,naem,"no desc" 不是那种系统错 说是call 函数无返回 请改正函数的提示
      

  3.   


    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 代码 贴出来
      

  4.   

    在function做异常处理EXCEPTION
     WHEN NOT_DATA_FOUND THEN
       RETRUN 'NOT DATA'
     WHEN OTHERS THEN
       RETURN 'ERROR'
      

  5.   

    谢谢,原表有遗留测试数据导致 ora-6502 我写了exception,把sqlcode打印出来发现的,问题解决了