create or replace procedure test_2(
in_id IN NUMBER,
in_first_name IN VARCHAR2,
in_last_name IN VARCHAR2,
in_major IN VARCHAR2,
Ret OUT VARCHAR2,
RetMo OUT VARCHAR2
) is
var_major varchar(20);
begin
select major into var_major from student_info where student_id = in_id;
IF (var_major IS NULL) THEN
RetMo := '查询没什么结果哦';
ELSE
RetMo := '查询结果是';
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RetMo := '查询无结果';
WHEN OTHERS THEN
RetMo := '查询失败';
end test_2;??????????????
为什么在查询时,如果表中没有记录,不进入我流程控制,而是直接抛出了异常啊
谁是要高手 ,快回答我啊,谢谢啊,救命的!!!
in_id IN NUMBER,
in_first_name IN VARCHAR2,
in_last_name IN VARCHAR2,
in_major IN VARCHAR2,
Ret OUT VARCHAR2,
RetMo OUT VARCHAR2
) is
var_major varchar(20);
begin
select major into var_major from student_info where student_id = in_id;
IF (var_major IS NULL) THEN
RetMo := '查询没什么结果哦';
ELSE
RetMo := '查询结果是';
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RetMo := '查询无结果';
WHEN OTHERS THEN
RetMo := '查询失败';
end test_2;??????????????
为什么在查询时,如果表中没有记录,不进入我流程控制,而是直接抛出了异常啊
谁是要高手 ,快回答我啊,谢谢啊,救命的!!!
解决方案 »
- 求教ORA-01772 错误的问题,oci编程
- 请教一条sql语句
- PL/SQL存储过程
- 正在执行SQL语句的session终端突然断电,其session会马上被标示为过期么?
- 请问no found oracm是什么原因
- SQLPLUS问题:一个字符型字段,不足8位时前补0
- 如何得到一个数据库中的所有非系统用户表?
- 怎么判断是否有记录?
- oracle 存储过程 Error: PLS-00103: 出现符号 "GETALLPAYMENTAPPLY"在需要下列之一时: if
- Oracle Ora-12514:tns:监听程序当前无法识别连接描述符中请求的服务
- 请问这个函数写的正确吗?
- 导建表的语法
EXCEPTION
WHEN NO_DATA_FOUND THEN
RetMo := '查询无结果';
你可以把RetMo := '查询没什么结果哦';
放在WHEN NO_DATA_FOUND THEN里
IF (var_major IS NULL) THEN
RetMo := '查询没什么结果哦';
里面做处理吗???
select count(*) into tmp_num from student_info where student_id = in_id;
if tmp_num = 0 then
RetMo := '查询没什么结果哦';
else
RetMo := '查询结果是';
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN
RetMo := '查询没什么结果哦';
end;
然后继续
把你后面的
WHEN NO_DATA_FOUND THEN
RetMo := '查询无结果';
去掉,这样试试。
要是不行,那就先select count(*) into vcount from tablename,然后判断vcount>0来做
select count(*) into tmp_num from student_info where student_id = in_id;
if tmp_num = 0 then
RetMo := '查询没什么结果哦';
return;
else
RetMo := '查询结果是';
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN
RetMo := '查询没什么结果哦';
end;
然后继续
把你后面的
WHEN NO_DATA_FOUND THEN
RetMo := '查询无结果';
去掉,这样试试。
要是不行,那就先select count(*) into vcount from tablename,然后判断vcount>0来做
in_id IN NUMBER,
in_first_name IN VARCHAR2,
in_last_name IN VARCHAR2,
in_major IN VARCHAR2,
Ret OUT VARCHAR2,
RetMo OUT VARCHAR2
) is
var_major varchar(20);
begin
begin
select major into var_major from student_info where student_id = in_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RetMo := '查询没什么结果哦';
return;
end
RetMo := '查询结果是';
end;
试一下看这样应该可以的
in_id IN NUMBER,
in_first_name IN VARCHAR2,
in_last_name IN VARCHAR2,
in_major IN VARCHAR2,
Ret OUT VARCHAR2,
RetMo OUT VARCHAR2
) is
var_major varchar(20);
begin
begin
select major into var_major from student_info where student_id = in_id;
exception
WHEN NO_DATA_FOUND THEN
var_major :=null;
end
IF (var_major IS NULL) THEN
RetMo := '查询没什么结果哦';
ELSE
RetMo := '查询结果是';
END IF;
EXCEPTION
WHEN OTHERS THEN
RetMo := '查询失败';
end test_2;
所以此判断
IF (var_major IS NULL) THEN
根本不会走到,判断也不会发挥作用。
直接合并进NO_DATA_FOUND就行了。