Oracle 函数中的值或数字错误,我可以';我没发现我哪里做错了
我有一个用sqldeveloper编写的函数,每次我想要执行时,我都会得到值或数字错误,我根本无法得到我出错的地方 这是我的代码,如果有人能告诉我我的错误隐藏在哪里,我将不胜感激 代码中使用的类型是已定义的,主要由varchar对象和对象表组成,我正确地将它们作为输入变量 我对这个错误感到沮丧,因为我已经编写了类似的函数,它工作得很好,但现在我花了4个小时试图找出值或数字错误的位置Oracle 函数中的值或数字错误,我可以';我没发现我哪里做错了,oracle,exception,plsql,oracle11g,stored-functions,Oracle,Exception,Plsql,Oracle11g,Stored Functions,我有一个用sqldeveloper编写的函数,每次我想要执行时,我都会得到值或数字错误,我根本无法得到我出错的地方 这是我的代码,如果有人能告诉我我的错误隐藏在哪里,我将不胜感激 代码中使用的类型是已定义的,主要由varchar对象和对象表组成,我正确地将它们作为输入变量 我对这个错误感到沮丧,因为我已经编写了类似的函数,它工作得很好,但现在我花了4个小时试图找出值或数字错误的位置 function get_tbank_service_status_bulk ( p_bank_i
function get_tbank_service_status_bulk (
p_bank_id_tab IN bank_id_tab,
p_service_status_tab OUT bank_service_status_tab
) return ITF_RETURN_REC
is
v_count number;
n_message_id number;
k_out number := 0;
ret_rec ITF_RETURN_REC;
cursor tbstatus_cur (p_bank_id_tab bank_id_tab)
is select tbc.rowid row_id, tbc.BANK_ID bank_id, tbc.service_status service_status
from TABLE (CAST (p_bank_id_tab AS bank_id_tab)) bid, mdm.mdm_tbank_customer tbc where bid.bank_id=tbc.bank_id ;
type cur_tbstatus_tab is table of tbstatus_cur%rowtype;
l_tbstatus_status cur_tbstatus_tab;
BEGIN
select MESSAGE_ID_SEQ.nextval into n_message_id from dual;
v_count := p_bank_id_tab.COUNT;
p_service_status_tab := bank_service_status_tab();
if v_count = 0 then
return itf_return_rec(0, ' ', n_message_id, ' ');
end if;
open tbstatus_cur(p_bank_id_tab);
fetch tbstatus_cur bulk collect into l_tbstatus_status;
for i in l_tbstatus_status.first..l_tbstatus_status.last
loop
if l_tbstatus_status(i).row_id is null then
p_service_status_tab.extend;
k_out := p_service_status_tab.last;
p_service_status_tab(k_out) := bank_service_status_rec(l_tbstatus_status(i).bank_id, -1);
DBMS_OUTPUT.PUT_LINE( 'nes1 || : ' );
else
DBMS_OUTPUT.PUT_LINE( 'nes4 || : ' );
p_service_status_tab.extend;
k_out := p_service_status_tab.last;
p_service_status_tab(k_out) := bank_service_status_rec(l_tbstatus_status(i).bank_id,l_tbstatus_status(i).service_status);
end if;
end loop;
if tbstatus_cur%isopen then
close tbstatus_cur;
end if;
ret_rec := ITF_RETURN_REC(0, ' ', n_message_id, ' ');
commit;
return ret_rec;
exception
when others then
rollback;
if tbstatus_cur%isopen then
close tbstatus_cur;
end if;
ret_rec := ITF_RETURN_REC(-1, 'Error while performing operation!', n_message_id, SQLERRM);
mdm_itf_logger.log_end('ERROR');
return ret_rec;
end get_tbank_service_status_bulk;
添加以下内容以列出错误发生的确切位置
DBMS_OUTPUT.put_line( SQLERRM || UTL_TCP.crlf || DBMS_UTILITY.format_error_backtrace );
错误发生在哪一行?首先,在开头添加
create或replace
。请包括您得到的完整错误堆栈,以及在函数出现异常时调用函数的语句-问题可能在调用方(尝试使用或分配返回值)而不是函数中。类型定义也可能是相关的。尽管如果您正在查看来自ret_rec:=ITF_RETURN_rec(-1,“执行操作时出错!”,n_message_id,SQLERRM)的输出代码>这可能没有多大帮助。最好用日志记录整个堆栈。最简单的调试步骤是注释掉异常处理程序,因为原始错误堆栈应该显示行号。