说明:使用select...into语句时,如果查询返回的数据不是1行,就会报no_data_found或者to_many_rows两种异常。
(1)对于to_many_rows是因为返回了多条记录,需要修改sql就好,比如修改或者增加过滤条件,增加distinct关键字筛选等,这个比较容易处理。
(2)当把某条狗1岁对应的名称赋值给v_name,报错:data not found,显而易见是因为是没有找到age=1的记录,特别注意不要和空值混淆。如果能找到age=1的记录,就算name是空值,也是不会报错的。
DECLARE
v_name VARCHAR2(100);
BEGIN
select t.name into v_name from dog t where t.age = 1;
END;
为了能查出记录,我们使用聚合函数,会把返回0条的数据变成返回1条,不管是max、还是min都可以,因为我们select into是需要返回一条记录,所以使用max() 、min()对于结果是不会有任何改变的。当然如果会返回多条数据时,就会产生影响了。所以使用select into 务必要把筛选条件写好,防止返回多条数据。
在使用NVL函数,就可以对空值进行处理,如: