PL SQL 用记录集接收数据

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

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值