如何解决ORA-06533: 关联数组超出计数的下标
我在执行过程时收到超出计数错误的下标。我试图在我的过程中填充一个关联数组,然后最终使用它来插入。我认为数组的初始化存在错误
包头中的类型定义
TYPE sonic_data_rec IS RECORD(
ep_a_num LOG_PICK.EP_A_NUM%TYPE,wvy_num LOG_PICK.WVY_NUM%TYPE,ltrl_name LOG_PICK.Ltrl_Name%TYPE,vel_pick_sq_num LOG_PICK.w_vel_pick_sq_num%TYPE,vel_sv_typ_cd LOG_PICK.W_VEL_SV_TYP_CD%TYPE,vel_sv_dt LOG_PICK.W_VEL_SV_DT%TYPE,w_vel_log_pick_cd LOG_PICK.w_vel_log_pick_cd%TYPE,sq_num LOG_PICK.W_VEL_PICK_SQ_NUM%TYPE,pick_cd LOG_PICK.W_VEL_LOG_PICK_CD%TYPE,onew_tm LOG_PICK.W_VEL_ONE_WAY_TV_TM%TYPE,sonic_log LOG_PICK.W_VEL_SOLOG_CALB_VSP%TYPE,ms_dpth LOG_PICK.W_VEL_PICK_DPTH%TYPE,tv_dpth LOG_PICK.W_VEL_PICK_DPTH%TYPE);
TYPE sonic_tab IS TABLE OF sonic_data_rec;
PROCEDURE LOAD_LOG_PICK
(p_wvy_num IN WELL_VEL_SURVEY.WVY_NUM%TYPE,p_noofpts IN NUMBER,p_data_list IN STRINGARRAY)
IS
l_son_array sonic_tab := sonic_tab();
BEGIN
count1 := 1;
LOOP
l_son_array(count1).ep_a_num := p_ep_a_num;
l_son_array(count1).wvy_num := p_wvy_num;
l_son_array(count1).vel_sv_typ_cd := 'L';
l_son_array(count1).vel_sv_dt := p_pick_date;
l_son_array(count1).vel_pick_sq_num := count1;
l_son_array(count1).w_vel_log_pick_cd := 'O';
l_son_array(count1).ms_dpth := l_ms_dpth;
l_son_array(count1).onew_tm := regexp_substr(p_data_list(count1),'[^ ]+',1,1);
l_son_array(count1).sonic_log := regexp_substr(p_data_list(count1),1);
EXIT WHEN count1=5000;
count1 := count1+1;
END LOOP;
解决方法
您正在尝试填充嵌套表,而不是关联数组。
如果 sonic_tab
是一个关联数组,它将被声明为
TYPE sonic_tab IS TABLE OF sonic_data_rec INDEX BY BINARY_INTEGER;
有关可以在 PL/SQL 中使用的不同类型集合的详细信息,请参阅 Oracle documentation on PL/SQL collection types。
由于您有一个嵌套表,您需要添加对 sonic_tab.EXTEND
的调用以使表变大。它从大小 0 开始,因为当您通过调用 sonic_tab()
创建它时,您没有将任何记录传递到构造函数中。在尝试向表的该项目添加任何内容之前,在循环的每次迭代中调用 sonic_tab.EXTEND(1);
或在循环之前调用一次 sonic_tab.EXTEND(5000);
,如果您事先知道在表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。