ORA-01403: no data found错误求助——PL/SQL代码排查
ORA-01403和ORA-06512错误排查与修复
核心错误原因
你代码里的SELECT语句触发了无数据异常,问题出在WHERE条件:
WHERE v_idno = 11111;
你在DECLARE部分仅声明了v_idno变量,但未给它赋值,默认值为NULL。而NULL = 11111的逻辑判断结果永远为假,导致查询不到任何数据,直接触发ORA-01403: no data found,ORA-06512是该错误的栈追踪信息,指向错误发生的代码行。
此外还有两个潜在问题:
ELSE分支仅输出提示,但未给v_newgoal赋值,后续执行UPDATE时会用NULL更新yrgoal字段,不符合业务预期。- 未添加异常处理,一旦目标记录不存在,程序会直接崩溃而非友好提示。
修复后的代码
SET SERVEROUTPUT ON DECLARE v_newgoal donor.yrgoal%TYPE; v_idno donor.idno%TYPE; v_name donor.name%TYPE; v_yrgoal donor.yrgoal%TYPE; BEGIN -- 修正WHERE条件,直接匹配表的idno字段 SELECT idno, name, yrgoal INTO v_idno, v_name, v_yrgoal FROM donor WHERE idno = 11111; IF v_yrgoal > 500 THEN v_newgoal := v_yrgoal * 2; ELSIF v_yrgoal < 500 THEN v_newgoal := v_yrgoal + 250; ELSE dbms_output.put_line('Error: Not Proceeding.'); -- 给v_newgoal赋值,避免UPDATE时使用NULL v_newgoal := v_yrgoal; END IF; UPDATE donor SET yrgoal = v_newgoal WHERE idno = 11111; dbms_output.put_line(v_idno||' '||v_name||' '||v_yrgoal); EXCEPTION -- 捕获无数据异常,给出友好提示 WHEN NO_DATA_FOUND THEN dbms_output.put_line('记录不存在:idno=11111'); END; / SET SERVEROUTPUT OFF
内容的提问来源于stack exchange,提问作者NoMansLand
相关产品推荐
相关产品推荐

