在存储过程中常用到字段值赋给变量的情况,此时主要会出现两种情况
一,能查询到记录
记录中字段值又分两种情况
1、字段有值
2、字段值为NULL
二、查询不到记录,COUNT返回为0
--一下是代码测试情况
-测试 SQL> select empno,sal,comm from emp where empno=7369; EMPNO SAL COMM ---------- ---------- ---------- 7369 800 SQL> declare v_empno number(6); 2 v_sal number(6); 3 v_comm number(6); 4 begin 5 select empno,sal,comm into v_empno,v_sal,v_comm from emp where empno=7369; 6 dbms_output.put_line('empno='||v_empno); 7 dbms_output.put_line('sal='||v_sal); 8 dbms_output.put_line('comm='||v_comm); 9 end; 10 / empno=7369 sal=800 comm= SQL> declare v_empno number(6); 2 v_sal number(6); 3 v_comm number(6); 4 begin 5 select comm into v_comm from emp where empno=7369; 6 dbms_output.put_line('comm='||v_comm); 7 end; 8 / comm= SQL> select * from emp where empno=7368; 未选定行 --未查询到记录,直接赋值则会抛出异常,针对这种情况,应做异常情况判断处理
SQL> declare v_empno number(6); 2 v_sal number(6); 3 v_comm number(6); 4 begin 5 select comm into v_comm from emp where empno=7368; 6 dbms_output.put_line('comm='||v_comm); 7 end; 8 / declare v_empno number(6); * 第 1 行出现错误: ORA-01403: 未找到数据 ORA-06512: 在 line 5 SQL> declare v_comm number(6); 2 begin 3 select comm into v_comm from emp where empno=7368; 4 dbms_output.put_line('comm='||v_comm); 5 exception 6 when others then 7 dbms_output.put_line('no_date_found'); 8 end; 9 / no_date_found PL/SQL 过程已成功完成。 --处理空记录情况 SQL> declare v_comm number(6); 2 v_cnt number(6); 3 begin 4 select count(*) into v_cnt from emp where empno=7368; 5 if v_cnt > 0 then 6 select comm into v_comm from emp where empno=7368; 7 dbms_output.put_line('comm='||v_comm); 8 end if; 9 exception 10 when others then 11 dbms_output.put_line('no_date_found'); 12 end; 13 / PL/SQL 过程已成功完成。