Gaussdb(DWS)自定义函数中select into语句没有记录时报错处理-云社区-华为云
问题报错信息:在select查询时使用自定义的函数,结果报错,query returned no rows when process INTO
参照这个链接里的方法,把函数定义的begin-end中加上一个if判断或者直接用exception语句。
ps:链接里说使用exception,但是在GaussDB(DWS)中进入和退出一个包含exception子句的块要比不包含的块开销大的多,而且当存储过程/函数逻辑较为复杂时,语句走到exception分支可能会触发实例或节点重启等bug。
所以我这里最终尝试了两个方法,最终选择使用if加判断。
源代码:
CREATE OR REPLACE FUNCTION func_tab1019(is_name varchar2)
RETURN varchar2
AS
DECLARE
v_result varchar2;
BEGIN
select name into v_result from tab1019 where id =is_name;
RETURN v_result;
END;
加exception
CREATE OR REPLACE FUNCTION func_tab1019(is_name varchar2)
RETURN varchar2
AS
DECLARE
v_result varchar2;
BEGIN
select name into v_result from tab1019 where id =is_name;
RETURN v_result;
EXCEPTION
WHEN no_data_found THEN
RETURN '0';
END;
加 if
CREATE OR REPLACE FUNCTION func_tab1019(is_name varchar2)
RETURN varchar2
AS
DECLARE
v_result varchar2;
BEGIN
select count(*) into v_result from tab1019 where id =is_name;
if v_result <> '0' then
select name into v_result from tab1019 where id =is_name;
RETURN v_result;
else
RETURN '0';
end if;
END;