(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;
没有查询结果时,会抛出异常(执行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;
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 /
你的语法是没有错误的,你抛出的异常是什么?不能适用可以用SELECT 获取OUT结果,不过首先你要传入一个变量,类似于程序中的变量引用
查询结果为空时会执行Exception
When Others Then
Return 0;并且在C++中用Select来查询这个Function
用try catch也是进入异常。
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;
先查询返回的记录个数, >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;
谢谢提醒,我试下用OUT来向外传参数