Oracle-实际返回的行数超出请求的行数

2019年09月02日 10:15 · 阅读(1339) ·

[目录]

开发环境

名称 版本
操作系统 Windows 10 X64
Oracel win64_11gR2_database
PLSQL Developer 11.0.4.1788(64 bit)01.179332 - Unlimited user license

问题描述

我编写了一个定时任务同步表数据,查询的时候发现定时任务同步失败

定时任务是调用了一个存储过程,单独调用这个存储过程的时候,提示 实际返回的行数超出请求的行数 错误

原因分析

检查存储过程时,发现在一个循环中有下面的语句

  1. declare
  2. var_costcenter_name varchar2(255);
  3. var_check_account_code varchar2(255);
  4. var_check_account_name varchar2(255);
  5. begin
  6. select COSTCENTER_NAME,CHECK_ACCOUNT_CODE,CHECK_ACCOUNT_NAME into var_costcenter_name,var_check_account_code,var_check_account_name
  7. from Test_Luoma
  8. where COSTCENTER_CODE = 'BZ505';
  9. --打印调用结果
  10. dbms_output.put_line(var_costcenter_name || var_check_account_code || var_check_account_name);
  11. end;

单独使用查询语句

  1. select COSTCENTER_NAME,CHECK_ACCOUNT_CODE,CHECK_ACCOUNT_NAME
  2. from Test_Luoma
  3. where COSTCENTER_CODE = 'BZ505';

查询的结果有 3 行,就是因为查询的结果是多条,导致 into 到变量的时候报错了

问题解决

修改 sql 语句,使 into 前的结果只有一条就可以

  1. declare
  2. var_costcenter_name varchar2(255);
  3. var_check_account_code varchar2(255);
  4. var_check_account_name varchar2(255);
  5. begin
  6. select COSTCENTER_NAME,CHECK_ACCOUNT_CODE,CHECK_ACCOUNT_NAME into var_costcenter_name,var_check_account_code,var_check_account_name
  7. from Test_Luoma
  8. where COSTCENTER_CODE = 'BZ505' and rownum=1 ;
  9. --打印调用结果
  10. dbms_output.put_line(var_costcenter_name || var_check_account_code || var_check_account_name);
  11. end;

扩展-Oracle-循环中的异常处理

Oracle-循环中的异常处理