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;??????????????
为什么在查询时,如果表中没有记录,不进入我流程控制,而是直接抛出了异常啊
谁是要高手 ,快回答我啊,谢谢啊,救命的!!!
解决方案 »
- 报表分类汇总,在oracle数据库出现语法错误
- 用Oracle 9i怎么创建新的用户?
- 求助:如何用sql同时更新某一用户下所有表中的“code”列?
- 求一条去重的SQL语句
- ORACLE 9I 安始化参数配置求解
- 如何限制oracle用户的会话数
- 求教一个很菜的问题:用SQL Plus 8.0连接其他服务器上的ORACLE8.0.5
- ===========SQL语句查询效率问题,100分送上~~~在线等待===========
- 一样的代码,一样的库结构,在sqlserver中可以,在oracle不可以
- 在Oracle 9i中,执行SELECT * FROM user_tab_columns,为什么不返回用户表的定义?
- 请问这个函数写的正确吗?
- 导建表的语法
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就行了。