oracle - 函数中的值或数字错误,我无法检测到哪里出错了 Oracle
问题描述
我有一个用 SQL 开发人员编写的函数,每次我想执行时都会得到值或数字错误,我根本无法找到我出错的地方。
这是我的代码,所以如果有人能给我一些关于我的错误隐藏在哪里的提示,我将不胜感激。
代码中使用的类型已定义,主要由 varchar 对象和对象表组成,我正确地将它们作为输入变量。
我对这个错误感到沮丧,因为我已经编写了类似的函数并且它工作得很好,但现在我花了 4 个小时试图找出值或数字错误在哪里。
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 );
推荐阅读
- c# - .net 核心 Web 应用程序 - 什么在使用所有这些内存?小可枚举 vs 大可枚举 vs 流响应
- angular - 在命令提示符下找不到模块“@angular/compiler”
- kubernetes - ./kvtctl.sh 处的 vitess 安装失败远程错误:rpc 错误:代码 = 不可用 desc = 传输正在关闭
- jquery - 在溢出隐藏区域中向上滑动的文本效果
- templates - 在 Vue 中跨组件共享模板
- hibernate - Hibernate 中的版本检查
- java - 将 Notes 字段转换为 JsonJavaArray
- c# - 无法选择最佳候选函数。您可能需要在 Postgres 中添加显式类型转换
- java - 安卓弹簧按钮
- opencv - 使用 dlib 检测眼睛地标