PL SQL 用记录集接收数据

来源:互联网 发布:淘宝新疆物流交通管制 编辑:程序博客网 时间:2024/06/10 00:07

用记录集接收数据的时候 ,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;

 

 

 

原创粉丝点击