[目录]
开发环境
名称 | 版本 |
---|---|
操作系统 | Windows 10 X64 |
Oracel | win64_11gR2_database |
PLSQL Developer | 11.0.4.1788(64 bit)01.179332 - Unlimited user license |
问题描述
我编写了一个定时任务同步表数据,查询的时候发现定时任务同步失败
定时任务是调用了一个存储过程,单独调用这个存储过程的时候,提示 实际返回的行数超出请求的行数
错误
原因分析
检查存储过程时,发现在一个循环中有下面的语句
declare
var_costcenter_name varchar2(255);
var_check_account_code varchar2(255);
var_check_account_name varchar2(255);
begin
select COSTCENTER_NAME,CHECK_ACCOUNT_CODE,CHECK_ACCOUNT_NAME into var_costcenter_name,var_check_account_code,var_check_account_name
from Test_Luoma
where 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_NAME
from Test_Luoma
where COSTCENTER_CODE = 'BZ505';
查询的结果有 3 行,就是因为查询的结果是多条,导致 into
到变量的时候报错了
问题解决
修改 sql 语句,使 into
前的结果只有一条就可以
declare
var_costcenter_name varchar2(255);
var_check_account_code varchar2(255);
var_check_account_name varchar2(255);
begin
select COSTCENTER_NAME,CHECK_ACCOUNT_CODE,CHECK_ACCOUNT_NAME into var_costcenter_name,var_check_account_code,var_check_account_name
from Test_Luoma
where COSTCENTER_CODE = 'BZ505' and rownum=1 ;
--打印调用结果
dbms_output.put_line(var_costcenter_name || var_check_account_code || var_check_account_name);
end;