ORA-06502 Numeri c или ошибка значения: нулевое значение ключа индекса таблицы - PullRequest
0 голосов
/ 03 апреля 2020

Я сталкиваюсь с этой ошибкой: ORA-06502 numari c или ошибка значения, значение ключа индекса нулевой таблицы . Я указал Строка ошибки в коде. Я уже видел эту SO ссылку , но это не помогло.

Определение типа записи

--*************************************************************************--
TYPE REC_SYN IS RECORD(
  TAB_VALUE         VARCHAR2(4000),
  USER_ID           VARCHAR2(30),
  TERMINAL          VARCHAR2(30),
  TRN_DATE          DATE,
  ORIGINAL_USER_ID  VARCHAR2(30),
  ORIGINAL_TERMINAL VARCHAR2(30),
  ORIGINAL_TRN_DATE DATE,
  LOC_ID            VARCHAR2(3),
  ZON_ID            VARCHAR2(3),
  ORG_ID            VARCHAR2(3),
  WS_SYNC_DATE      DATE,
  VALUE_FROM        CHAR(1));

          --defining table of record   
                TYPE TAB_REC_SYN IS TABLE OF REC_SYN;
  -- table of record group into variable             
  V_DATA    HIS.PKG_SPECIFICATION_TYPES.TAB_REC_SYN;
                V_INDEX   BINARY_INTEGER;--PLS_INTEGER;
                V_REC_SYN HIS.PKG_SPECIFICATION_TYPES.REC_SYN;
              -- defining cursor
                TYPE CUR_HIST IS REF CURSOR;
                V_CUR_HIST CUR_HIST;
V_QUERY   := ' SELECT DISTINCT D.' ||P_COLUMN || '  AS TAB_VALUE,
                     D.USER_ID,
                     D.TERMINAL,
                     D.TRN_DATE,
                     D.ORIGINAL_USER_ID,
                     D.ORIGINAL_TERMINAL,
                     D.ORIGINAL_TRN_DATE,
                     D.ORG_ID,
                     D.ZON_ID,
                     D.LOC_ID,
                     D.WS_SYNC_DATE,
                     ''O'' AS VALUE_FROM
                FROM ' || P_OWNER || '.' || P_TABLE_NAME || ' D
               WHERE 1 = 1 ' || P_KEY_COLUMN || V_DATE ||
    ' UNION
       SELECT D.' || P_COLUMN || ' AS TAB_VALUE,
                     D.NEW_USER_ID  AS USER_ID,
                     D.NEW_TERMINAL AS TERMINAL,
                     D.NEW_TRN_DATE AS TRN_DATE,
                     D.ORIGINAL_USER_ID,
                     D.ORIGINAL_TERMINAL,
                     D.ORIGINAL_TRN_DATE,
                     D.ORG_ID,
                     D.ZON_ID,
                     D.LOC_ID,
                     D.WS_SYNC_DATE,
                     ''S'' AS VALUE_FROM
            FROM ' || V_SYN_OWNER || ' D
           WHERE 1 = 1 ' || P_KEY_COLUMN || V_DATE;               
              --fetching cursor
                OPEN V_CUR_HIST FOR V_QUERY;
--v_query have my select statement
   --loop started           
   LOOP
                  FETCH V_CUR_HIST
                    INTO V_REC_SYN;
                  EXIT WHEN V_CUR_HIST%NOTFOUND;

                  V_DATA(V_INDEX).TAB_VALUE          := V_REC_SYN.TAB_VALUE; -- Error line
                  V_DATA(V_INDEX).USER_ID            := V_REC_SYN.USER_ID;
                  V_DATA(V_INDEX).TERMINAL           := V_REC_SYN.TERMINAL;
                  V_DATA(V_INDEX).TRN_DATE           := V_REC_SYN.TRN_DATE;
                  V_DATA(V_INDEX).ORIGINAL_USER_ID   := V_REC_SYN.ORIGINAL_USER_ID;
                  V_DATA(V_INDEX).ORIGINAL_TERMINAL  := V_REC_SYN.ORIGINAL_TERMINAL;
                  V_DATA(V_INDEX).ORIGINAL_TRN_DATE  := V_REC_SYN.ORIGINAL_TRN_DATE;
                  V_DATA(V_INDEX).ORG_ID             := V_REC_SYN.ORG_ID;
                  V_DATA(V_INDEX).ZON_ID             := V_REC_SYN.ZON_ID;
                  V_DATA(V_INDEX).LOC_ID             := V_REC_SYN.LOC_ID;
                  V_DATA(V_INDEX).WS_SYNC_DATE       := V_REC_SYN.WS_SYNC_DATE;
                  V_DATA(V_INDEX).VALUE_FROM         := V_REC_SYN.VALUE_FROM;
--adding 1 into index                   
V_INDEX := V_INDEX + 1;                   
PIPE ROW(V_REC_SYN);
  --loop ended          
  END LOOP;
...