微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ORA-06533: 关联数组超出计数的下标

如何解决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;  

程序代码,只贴package_body的相关代码

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 举报,一经查实,本站将立刻删除。