Oracle 函数没有返回我期望的结果
在下面的函数中,我试图理解为什么只有当我传入0135666时,它才会返回BLAH,然后传入的任何其他内容都返回null值。我的期望是,无论传入了什么,它都会返回BLAH,因为我在执行SELECT INTO之后重置了str_mgrin_out。我一直在Oracle 10g中测试这一点Oracle 函数没有返回我期望的结果,oracle,plsql,Oracle,Plsql,在下面的函数中,我试图理解为什么只有当我传入0135666时,它才会返回BLAH,然后传入的任何其他内容都返回null值。我的期望是,无论传入了什么,它都会返回BLAH,因为我在执行SELECT INTO之后重置了str_mgrin_out。我一直在Oracle 10g中测试这一点 CREATE OR REPLACE FUNCTION GET_MANAGERGIN2 (str_empgin_in IN varchar2) RETURN varchar2 AS str_mgrgin_out var
CREATE OR REPLACE FUNCTION GET_MANAGERGIN2 (str_empgin_in IN varchar2)
RETURN varchar2
AS
str_mgrgin_out varchar2(10);
BEGIN
SELECT 'FOO' INTO str_mgrgin_out FROM dual WHERE str_empgin_in = '01356666';
str_mgrgin_out := 'BLAH';
RETURN str_mgrgin_out;
END GET_MANAGERGIN2;
/
-- Returns null but expecting BLAH
SELECT GET_MANAGERGIN2('00356666') FROM dual;
-- Returns BLAH
SELECT GET_MANAGERGIN2('01356666') FROM dual;
我假设这是因为如果SELECT INTO没有在str_mgrgin_out中返回一个值,它将抛出一个异常,因此str_mgrgin_out:='BLAH';这一行永远不会被执行 我想错误应该是ORA-01403 尝试在末尾添加异常处理程序,如下所示:
Exception
When Others Then
str_mgrgin_out := 'BLAH';
您可能还需要用开始…结束来围绕它,因此它将是:
CREATE OR REPLACE FUNCTION GET_MANAGERGIN2 (str_empgin_in IN varchar2)
RETURN varchar2
AS
str_mgrgin_out varchar2(10);
BEGIN
BEGIN
SELECT 'FOO' INTO str_mgrgin_out FROM dual WHERE str_empgin_in = '01356666';
str_mgrgin_out := 'BLAH';
Exception
When Others THen
str_mgrgin_out := 'BLAH';
END;
RETURN str_mgrgin_out;
END GET_MANAGERGIN2;
我假设这是因为如果SELECT INTO没有在str_mgrgin_out中返回一个值,它将抛出一个异常,因此str_mgrgin_out:='BLAH';这一行永远不会被执行 我想错误应该是ORA-01403 尝试在末尾添加异常处理程序,如下所示:
Exception
When Others Then
str_mgrgin_out := 'BLAH';
您可能还需要用开始…结束来围绕它,因此它将是:
CREATE OR REPLACE FUNCTION GET_MANAGERGIN2 (str_empgin_in IN varchar2)
RETURN varchar2
AS
str_mgrgin_out varchar2(10);
BEGIN
BEGIN
SELECT 'FOO' INTO str_mgrgin_out FROM dual WHERE str_empgin_in = '01356666';
str_mgrgin_out := 'BLAH';
Exception
When Others THen
str_mgrgin_out := 'BLAH';
END;
RETURN str_mgrgin_out;
END GET_MANAGERGIN2;
select匹配零行,并引发“未找到数据”PL/SQL异常 但是,找不到任何数据都不会被识别为SQL错误,只是结果集的结尾
因此,在SELECT中使用时,将返回空值。SELECT匹配零行,并引发NOU DATA FOUND PL/SQL异常 但是,找不到任何数据都不会被识别为SQL错误,只是结果集的结尾
因此,在SELECT中使用时,将返回一个空值。谢谢,这确实为我的总体目标指明了正确的方向。谢谢,这确实为我的总体目标指明了正确的方向。