查询在oracle 10g中运行,但在11g中不运行

时间:2015-03-26 14:51:18

标签: sql plsql oracle11g oracle10g

我有这个在oracle 10g中运行的查询:

sMemberId := bertlv.GET_OW_TAG_VALUE(F0, 'D5', '');
stnd.process_message( stnd.Information ,'sMemberId = ' ||sMemberId);
if sMemberId = '147' then
   sBankToName := 'BMI';
else

--everything works until this line below:

select trim(max(upper(name)))
into sBankToName
from BIN_TABLE
where amnd_state = 'A'
and member_id = sMemberId;

stnd.process_message( stnd.Information ,'sBankToName = ' ||sBankToName);
end if;


If sBankToName is null or sBankToName = '' then
RetCode := 201;
ErrMsg := 'CUST_ACQ_TO_ISS: Destination Bank Not Found (' || trim(sMemberId) || ')';
return;
end if;

当我选择名称并将值输入变量sBankToName时,所有工作都在行之前。此变量为NULL,因此它返回了我设置的错误消息。但是,它不应该为NULL,因为条件是正确的。有人可以给我一些关于这个问题的意见吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

首先通过dbms_output.put_line在select查询之后打印它,然后在stnd.process_message行之后打印它,它是真正的null或者是什么值,这里是示例:

select trim(max(upper(name)))
into sBankToName
from BIN_TABLE
where amnd_state = 'A'
and member_id = sMemberId;

dbms_output.put_line(sBankToName);

stnd.process_message( stnd.Information ,'sBankToName = ' ||sBankToName);
end if;

dbms_output.put_line(sBankToName);

然后你就可以轻松调试了。