我有oracle存储过程,我在程序开始时检查发件人I&#d,源系统和事务编号。我可以这样做:
If Id != "aaa"
Exit -1;
Else if source = " ".
Exit -1;
Else if trans = " ".
Exit -1;
Else.
-- continues stored procedure
我感谢任何帮助
答案 0 :(得分:2)
为了更一般地重新解释你的问题,你希望你的例程的调用者知道它内部是否发生了不好的事情。在PL / SQL中有(至少)三种方法。
OUT
参数过程不能返回一个值,就像函数一样,但它可以设置一个输出参数:
CREATE PROCEDURE inner (p_id IN VARCHAR2(10), p_res OUT NUMBER)
IS
BEGIN
p_res := 0; -- default value
IF p_id = 'aaa' THEN
p_res := -1;
RETURN;
ELSE
-- do something
END IF;
END;
然后在调用者中你会得到:
DECLARE res NUMBER;
...
inner('aaa', res);
IF res = -1 THEN
-- panic!
END IF;
...
尽管您似乎厌恶功能,但这可能是一种选择。
CREATE FUNCTION inner (p_id IN VARCHAR2(10))
RETURN NUMBER
IS
BEGIN
IF p_id = 'aaa' THEN
RETURN -1;
END IF;
-- do something
RETURN 0;
END;
然后在来电者中:
...
IF inner('aaa') = -1 THEN
-- panic!
END IF;
...
与其他编程语言类似,PL / SQL也有例外:
CREATE PROCEDURE inner (p_id IN VARCHAR2(10))
IS
BEGIN
IF p_id = 'aaa' THEN
RAISE_APPLICATION_ERROR(-20000, 'ID cannot be ''aaa''');
ELSE
-- do something
END IF;
END;
并且在来电者中:
...
DECLARE
panic EXCEPTION; -- declare exception
PRAGMA EXCEPTION_INIT (panic, -20000); -- assign error code to exception
...
BEGIN
inner ('aaa');
EXCEPTION
WHEN panic THEN
-- proceed to panic
END;
答案 1 :(得分:0)
您对IF...ELSE
和exit
使用了错误的语法。
鉴于您说您需要获得返回值,您可能需要使用CASE
这样的函数:
create or replace function testFun ( pIn1 varchar2, pIn2 varchar2) return varchar2 is
begin
case
when pIn1 is null then
return -1;
when pIn2 = ' ' then
return -2;
else
return 999;
end case;
end;