[目录]
开发环境
| 名称 | 版本 |
|---|---|
| 操作系统 | Windows 10 X64 |
| Oracel | win64_11gR2_database |
| PLSQL Developer | 11.0.4.1788(64 bit)01.179332 - Unlimited user license |
问题描述
我编写了一个定时任务同步表数据,查询的时候发现定时任务同步失败
定时任务是调用了一个存储过程,单独调用这个存储过程的时候,提示 实际返回的行数超出请求的行数 错误

原因分析
检查存储过程时,发现在一个循环中有下面的语句
declarevar_costcenter_name varchar2(255);var_check_account_code varchar2(255);var_check_account_name varchar2(255);beginselect COSTCENTER_NAME,CHECK_ACCOUNT_CODE,CHECK_ACCOUNT_NAME into var_costcenter_name,var_check_account_code,var_check_account_namefrom Test_Luomawhere COSTCENTER_CODE = 'BZ505';--打印调用结果dbms_output.put_line(var_costcenter_name || var_check_account_code || var_check_account_name);end;
单独使用查询语句
select COSTCENTER_NAME,CHECK_ACCOUNT_CODE,CHECK_ACCOUNT_NAMEfrom Test_Luomawhere COSTCENTER_CODE = 'BZ505';
查询的结果有 3 行,就是因为查询的结果是多条,导致 into 到变量的时候报错了
问题解决
修改 sql 语句,使 into 前的结果只有一条就可以
declarevar_costcenter_name varchar2(255);var_check_account_code varchar2(255);var_check_account_name varchar2(255);beginselect COSTCENTER_NAME,CHECK_ACCOUNT_CODE,CHECK_ACCOUNT_NAME into var_costcenter_name,var_check_account_code,var_check_account_namefrom Test_Luomawhere COSTCENTER_CODE = 'BZ505' and rownum=1 ;--打印调用结果dbms_output.put_line(var_costcenter_name || var_check_account_code || var_check_account_name);end;