GAUSS数据库函数select into没有数据报错解决方案

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值