在存储过程中常用到字段值赋给变量的情况,此时主要会出现两种情况
一,能查询到记录
记录中字段值又分两种情况
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 过程已成功完成。