用记录集接收数据的时候 ,SELECT 语句返回的只能是一行结果,否则会出现异常。如:
DECLARE
--定义一个记录集
TYPE ab01_record_type IS RECORD(
v_aab004 ab01.AAB004%TYPE,--锚定ab01的数据类型
v_aab003 ab01.AAB003%TYPE);--锚定ab01的数据类型
rec_ab01 ab01_record_type;
BEGIN
BEGIN
SELECT aab004, aab003 INTO rec_ab01 FROM t_ab01;
-- WHERE t_ab01.aab001 = &no;
DBMS_OUTPUT.put_line('单位名称是:' || rec_ab01.v_aab004);
DBMS_OUTPUT.put_line('二级单位编码是:' || rec_ab01.v_aab003);
END;
如果不进行异常处理则程序运行出错。因此应该扑捉异常,同时给where一个条件,让其返回的只有一行结果。在where中使用变量名时,变量名不能与列名相同,如aab001=aab001
如果找不到数据,同样也会出现异常,因此,在每个查询中都要对异常进行捕捉。
完整的程序
DECLARE
--定义一个记录集
TYPE ab01_record_type IS RECORD(
v_aab004 ab01.AAB004%TYPE,--锚定ab01的数据类型
v_aab003 ab01.AAB003%TYPE);--锚定ab01的数据类型
rec_ab01 ab01_record_type;
BEGIN
BEGIN
SELECT aab004, aab003
INTO rec_ab01
FROM t_ab01
WHERE t_ab01.aab001 = &no;
DBMS_OUTPUT.put_line('单位名称是:' || rec_ab01.v_aab004);
DBMS_OUTPUT.put_line('二级单位编码是:' || rec_ab01.v_aab003);
--异常处理
EXCEPTION
WHEN NO_DATA_FOUND THEN--找不到数据
DBMS_OUTPUT.put_line('找不到相应的数据');
WHEN TOO_MANY_ROWS THEN--返回多行
dbms_output.put_line('返回不只一行数据');
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('出现其他异常'||SQLERRM);
END;
END;