(1)想用Function返回多个参数,只知道使用out参数,但是不知道如何使用?(2)还有一个问题是: select count(1) into v_count,
没有查询结果时,会抛出异常(执行Exception),如何能不抛出异常呢?
当查询结果为空时v_count也赋值0。CREATE OR REPLACE FUNCTION GET_COUNT(
v_ID in varchar2) 
return number     
as
v_count number(10); 
Begin
   --没有查询结果时,会抛出异常
   select count(1) into v_count from tb_log t where t.id = v_ID;
   Return v_count;
Exception
   When Others Then
      Return 0;
End GET_COUNT;
---------------------------------调用Function
--如果使用Out返回多个参数的话,是否可以使用Select来查询返回的Out参数呢?
select GET_COUNT(123) AS retVal from dual;

解决方案 »

  1.   

    create or replace function f_add(p_1 IN OUT number, p_2 IN OUT number, p_3 OUT number) return number
      2  is
      3  BEGIN
      4     p_1 := p_1 + p_2;
      5     p_2 := p_1;
      6     p_3 := p_1;
      7     return p_1;
      8  end;
      9  /
      

  2.   

    select count(1) into v_count
    你的语法是没有错误的,你抛出的异常是什么?不能适用可以用SELECT 获取OUT结果,不过首先你要传入一个变量,类似于程序中的变量引用
      

  3.   

    ----------------
    查询结果为空时会执行Exception
       When Others Then
          Return 0;并且在C++中用Select来查询这个Function
    用try catch也是进入异常。
      

  4.   

    查询结果为空时,无法把 空值 用into传给varchar2类型的变量。
      

  5.   

    这个不是抛出异常为0  当没有符合条件的行时 count(1) 得到的结果本身就为0关于out的参数怎么样 你google下吧 也没什么特别的 CREATE OR REPLACE FUNCTION GET_COUNT(
    v_ID in varchar2,v_id2 out varchar2) --这个v_id2为out参数
    return number     
    as
    v_count number(10); 
    Begin
       --没有查询结果时,会抛出异常
       select count(1) into v_count from tb_log t where t.id = v_ID;
       v_id2='共有'||v_count||'行'; 
        --在这里给out参数赋值,这样你调用这个函数时 可以定义一个变量来接受这个out参数
       Return v_count;
    Exception
       When Others Then
          Return 0;
    End GET_COUNT;
      

  6.   

    想到一个比较笨点的方法,
    先查询返回的记录个数, >0的话再把 查询的 字符串into到某个变量中,如果直接把一个空串into给一个varchar2类型的变量就抛异常。CREATE OR REPLACE FUNCTION testFunc(v_ID in varchar2) return number as
      v_count  number(10); --整数
      v_Name varchar2(20); --字符串
    Begin
      select count(1) into v_count from tb_log t where t.id = v_ID;
      If v_count > 0 Then
        select t.Name
          into v_Name
          from tb_log t
         where t.id = v_ID;
        return 1; --查询到需要的数据
      Else
        return 0; --查询结果为空
      End if;
    Exception
      When Others Then
        Return - 1; --处理异常
    End testFunc;
    ----------------------测试调用Function
    select testFunc(34566) AS retVal from dual;
      

  7.   

    ------------------
    谢谢提醒,我试下用OUT来向外传参数