我在package body中定义一个function,有一些疑问,想请教大家。
FUNCTION xx
    (
        p_a    IN  NUMBER,
        p_b   IN  NUMBER,
        p_c         OUT NUMBER
    ) RETURN NUMBER IS        v_sqlstr            VARCHAR2(100); -- SQL文
    BEGIN    p_c := NULL;
    v_sqlstr := 'select count(*) from tab';
    EXECUTE IMMEDIATE v_sqlstr INTO p_c;    return 'ok';
    WHEN OTHERS THEN
        return 'fail';END xx
1,我想问一下,在调用这个function时,调用的地方能取到p_c的值么?这个function的返回值的不是‘ok’或者‘fail’吗?那如果,值把结果,赋值给局部变量,写这个function还有意义吗?
我这里有个程序是这样写的,按理说,应该是取得p_c的值呀。2,“EXECUTE IMMEDIATE v_sqlstr INTO p_c;”如果,我在这里,把结果into给一个全局变量,可以吗?3,如果我想在一个function内得到一个结果,并且赋值给全局变量,那么只能类似这样“EXECUTE IMMEDIATE v_sqlstr INTO p_c;”写吧?

解决方案 »

  1.   

    函数的结构返回是ok’或者‘fail’,p_c这个值也可以取得,原因是这个p_c事输出变量(out参数)
    调用xx:则会输出返回值和P_C的值declare
     v_a varchar2(10);
     v_b number;
    begin
     v_a:=scott.xxss(1,1,v_b);
     dbms_output.put_line(v_a);
     dbms_output.put_line(v_b);
    end;这样也可以复制
    select count(*) into p_c from tab;
    错误地方:
    你返回值是字符串,你return number,还有你这里用的WHEN OTHERS THEN 前需要家 exception
      

  2.   

    恩恩,那个地方笔误。那我想问一下,我在function外,怎样取得这个p_c的值呢?
    我如果不写out参数。我直接在function内,把值into给一个全局变量,这样可以吗?谢谢解答
      

  3.   

    刚才没仔细看,明白怎么取得那个out变量了。那我可否都是in参数,然后在function内部,把值赋给全局变量?
      

  4.   

    可以的,在包里面定义的全局变量:
    如:create or replace package test_global 
    is 
      global_v number(3):=0;                         -- 包的全局变量 
      function getValue(p_c in number) return number; 
    end; create or replace package body test_global 
    is 
      function getValue(p_c in number) 
       is 
         begin 
          global_v:=p_c; --修改全局变量并输出 
          dbms_output.put_line(global_v); 
          return 0;
         end getValue; 
    end; 
      

  5.   

    还差个return number ,失误!!!!!