Буфер символьных строк слишком маленький ошибка числа или значения что это

I have a below Package which is giving error

ORA-06502: PL/SQL: numeric or value error: character string buffer too small 

Please let me know what is going wrong here.

CREATE OR REPLACE PACKAGE BODY PKG_H
IS

    PROCEDURE PROC_SUBMIT_H
     (
        Pout_Rqst_Id                  OUT     NVARCHAR2,                    
        Pout_err_cd                   OUT     VARCHAR2,
        Pout_err_msg                  OUT     VARCHAR2,
        Pin_Rqst_Type_Id              IN      NUMBER,         
        Pin_Attachment                IN      NVARCHAR2,
        Pin_Brand_Id                  IN      NVARCHAR2,
        Pin_Prop_Id                   IN      NVARCHAR2,
    --    Pin_Htl_Stat_Rqst_Typ_ID      IN      NUMBER,
        Pin_Orcl_Acct_Num             IN      NVARCHAR2, -- NUMBER, /* Changed on 22.09.2011,as stated by FIS Team  */
        Pin_ORCL_User_Name            IN      NVARCHAR2,
        Pin_Rstn_Id                   IN      NUMBER,
        Pin_Rstn_Name                 IN      NVARCHAR2,
        Pin_Rstn_Start_Date           IN      DATE,
        Pin_Rstn_End_Date             IN      DATE,
      --  Pin_Change_Type_Ind           IN      NVARCHAR2,
        Pin_Trans_Time_Orcl           IN      TIMESTAMP,
        Pin_Fis_Acct_Stat_Prsnt_Id    IN      NUMBER,
        Pin_Fis_Acct_Future_Stat      IN      NUMBER,
        Pin_Auto_Ind                  IN      NVARCHAR2,
  --      Pin_Stat_Change_Resn_ID       IN      NUMBER,  /* changed due to ETL requirement as on 17.09.2011 */
        Pin_Stat_Change_Resn_Desc     IN      NVARCHAR2, /* changed due to ETL requirement as on 17.09.2011 */
        Pin_Brand_Dot_Com_Ind         IN      NVARCHAR2,
   --     Pin_Expdt_Ind                 IN      NVARCHAR2,
    --    Pin_Expdt_Dt                  IN      DATE,
        Pin_Rqstr_Id                  IN      NVARCHAR2,
        Pin_Impn_Id                   IN      NUMBER,
    --    Pin_Agent_Id                  IN      NVARCHAR2, /* Changed as on 22.09.2011 */
    --    Pin_Agent_Name                IN      NVARCHAR2, /* Changed as on 22.09.2011 */
        Pin_File_Name                 IN      NVARCHAR2,
        Pin_Prov_Date                 IN      DATE 
     --   Pin_Rqst_Stat_ID              IN      NUMBER     
    --    Pin_Prov_Time                 IN      DATE
       )
     IS
   --   lv_err_cd          VARCHAR2(10);
   --   lv_err_msg          VARCHAR2(4000);
      Ln_Cnt              NUMBER;
      DUP_VAL             EXCEPTION;

      lv_rqst_id          NVARCHAR2(20);
      Ln_rqst_stat_id_it NUMBER;
      Ln_rqst_stat_id_Q  NUMBER;
      Ln_rqst_category_id NUMBER;   
      Ln_Stat_Change_Resn_Id NUMBER;
   --   Ln_Htl_Stat_Rqst_Typ_Id NUMBER;
      lt_data_01   STRINGTABLETYPE := STRINGTABLETYPE();
      lt_data_02   STRINGTABLETYPE := STRINGTABLETYPE();

      BEGIN

        SELECT fnc_gen_request_id 
          INTO Lv_rqst_id 
          FROM dual;

        SELECT rqst_stat_id 
          INTO Ln_rqst_stat_id_it 
          FROM rqst_stat_mst 
         WHERE rqst_stat_desc = 'In Transmit';       

        SELECT rqst_stat_id 
          INTO Ln_rqst_stat_id_Q 
          FROM rqst_stat_mst 
         WHERE rqst_stat_desc = 'Pending';  

      SELECT COUNT(1)
        INTO Ln_Cnt 
        FROM HOTEL_STAT_RQST
       WHERE FILE_NAME=Pin_File_Name;   

      IF Ln_Cnt >0 then  
       RAISE DUP_VAL;
      END IF;


       IF Pin_Stat_Change_Resn_Desc IS NOT NULL THEN 

        SELECT STAT_CHANGE_RESN_ID 
          INTO Ln_Stat_Change_Resn_Id
          FROM STAT_CHANGE_RESN_MST
         WHERE UPPER(STAT_CHANGE_RESN_DESC)=UPPER(TRIM(Pin_Stat_Change_Resn_Desc));
        END IF;


        DELETE 
          FROM HOTEL_STAT_RQST
         WHERE RQST_ID=lv_rqst_id;

        INSERT INTO HOTEL_STAT_RQST
                 (RQST_ID
                 ,RQST_TYPE_ID
                 ,RQST_STAT_ID
                 ,BRAND_ID
                 ,PROPERTY_ID
                 ,STAT_CHANGE_RESN_ID
             --    ,HOTEL_STAT_RQST_TYPE_ID
                 ,ORCL_ACCT_NUM
                 ,ORCL_USER_NAME
                 ,TRANS_TIME_ORCL
                 ,FIS_ACCOUNT_STATUS_PRESENT_ID
                 ,FIS_ACCT_FUTURE_STAT
                 ,RSTCTN_ID
                 ,RSTCTN_NAME
                 ,RSTCTN_STRT_DT
                 ,RSTCTN_END_DT
              --   ,RSTCTN_PREV_STRT_DT  /* SCHEMA CHANGED  */
             --    ,RSTCTN_PREV_END_DT  /* SCHEMA CHANGED  */
              --   ,PREV_RSTN_ID    /* SCHEMA CHANGED  */
                 ,AUTO_IND
            --     ,CHANGE_TYPE_IND
                 ,BRAND_DOT_COM_IND
                 ,RQSTR_ID
                 ,IMPN_ID
                 ,EXPDT_IND
                 ,EXPDT_DT
                -- ,PROVSN_STAT /* SCHEMA CHANGED  */
                -- ,PROVSN_TIME /* SCHEMA CHANGED  */
                 ,CREATED_ON
                 ,UPDATED_BY 
                 ,UPDATED_ON
                 ,FILE_NAME 
                 ,PROV_DATE
                  )
           VALUES  
                 (
                  lv_rqst_id
                 ,Pin_Rqst_Type_Id
                 ,Ln_rqst_stat_id_it
                 ,Pin_Brand_Id
                 ,Pin_Prop_Id
                 ,Ln_Stat_Change_Resn_Id   /* changed due to ETL requirement as on 17.09.2011 */
            --     ,Pin_Htl_Stat_Rqst_Typ_ID
                 ,Pin_Orcl_Acct_Num
                 ,Pin_ORCL_User_Name
                 ,Pin_Trans_Time_Orcl
                 ,Pin_Fis_Acct_Stat_Prsnt_Id
                 ,Pin_Fis_Acct_Future_Stat
                 ,Pin_Rstn_Id
                 ,Pin_Rstn_Name
                 ,Pin_Rstn_Start_Date
                 ,Pin_Rstn_End_Date
            --     ,NULL  /* SCHEMA CHANGED  */
            --     ,NULL  /* SCHEMA CHANGED  */
            --     ,NULL  /* SCHEMA CHANGED  */
                 ,Pin_Auto_Ind
                -- ,Pin_Change_Type_Ind
                 ,Pin_Brand_Dot_Com_Ind
                 ,Pin_Rqstr_Id
                 ,Pin_Impn_Id
                 ,NULL
                 ,NULL
          --       ,NULL   /* SCHEMA CHANGED  */
           --      ,Pin_Prov_Time  /* SCHEMA CHANGED  */
                 ,SYSDATE
                 ,Pin_Rqstr_Id
                 ,SYSDATE 
                 ,Pin_File_Name
                 ,Pin_Prov_Date
                 ); 

      IF Pin_Attachment IS NOT NULL THEN

        DELETE
          FROM attach_ref
         WHERE rqst_id=lv_rqst_id;   

         SELECT CAST(SPLIT(Pin_Attachment,'|') AS STRINGTABLETYPE) INTO lt_data_01 FROM DUAL;

          FOR i_outer IN  1..lt_data_01.COUNT LOOP


            SELECT CAST(SPLIT(lt_data_01(i_outer),'~')AS STRINGTABLETYPE) INTO lt_data_02 FROM DUAL;

            INSERT INTO attach_ref 
                    ( 
                    rqst_id,
                    attach_id,  -- SEQUENCE
                    attach_ind,  
                    attach_file_name,                          
                    file_path,
                    ord_num
                    )
                VALUES(                  
                    lv_rqst_id,
                    attach_id_seq.NEXTVAL,  -- SEQUENCE
                    'REQUESTOR',
                    lt_data_02(1),
                    lt_data_02(2),
                    i_outer            
                    );

          END LOOP;
      END IF;  


       DELETE FROM rqst_queue WHERE rqst_id=lv_rqst_id;

        INSERT INTO rqst_queue             
                (
                rqst_id, 
                prnt_rqst_id, 
                queu_start_time, 
                queu_end_time, 
                agnt_id, 
                agnt_name, 
                property_id, 
                src_sys,
                tgt_sys, 
                queu_stat_ind    
                )            
          VALUES 
                (
                 lv_rqst_id,
                  NULL,
                  SYSDATE,
                  NULL,
                  NULL,
                  NULL,
                  Pin_Prop_Id,
                  'RQT',
                  'SFDC',
                  Ln_rqst_stat_id_Q          
                );    

         IF Pin_Rqst_Type_Id IS NOT NULL THEN  

            SELECT rqst_category_id 
              INTO ln_rqst_category_id 
              FROM rqst_type_mst 
             WHERE rqst_type_id = Pin_Rqst_Type_Id;

          END IF;

          DELETE
            FROM rqst_sumry
           WHERE rqst_id = lv_rqst_id;

          INSERT INTO rqst_sumry
                (
                  rqst_id, 
                  rqst_type_id,
                  prnt_rqst_id, 
                  brand_id, 
                  property_id, 
                  expdt_ind, 
                  expdt_dt,
                  rqstr_id,   
                  rqst_stat_id,
                  compln_dt, 
                  estm_compln_time, 
                  rqst_category_id,
                  submission_dt 
                )
           VALUES
                (
                  lv_rqst_id,
                  Pin_Rqst_Type_Id,  
                  NULL,
                  Pin_Brand_Id,
                  Pin_Prop_Id,
                  NULL,
                  NULL,
                  Pin_Rqstr_Id,
                  Ln_rqst_stat_id_it,       
                  NULL, 
                  NULL,
                  ln_rqst_category_id, 
                  SYSDATE   
                );

        COMMIT;    


        Pout_Rqst_Id := lv_rqst_id;

        EXCEPTION 
        WHEN NO_DATA_FOUND THEN

        ROLLBACK;
        Pout_err_cd  := SQLCODE;
        Pout_err_msg := 'STAT_CHANGE_RESN_MISMATCH';  

        WHEN DUP_VAL THEN
        Pout_err_cd  := SQLCODE;
        Pout_err_msg := 'DUPLICATE';  



        WHEN OTHERS THEN

         ROLLBACK;

         Pout_err_cd  := SQLCODE;
         Pout_err_msg := SUBSTR(SQLERRM, 1 , 4000);    

      END PROC_SUBMIT_H;


END PKG_H;
/

  • #1

Ошибка: буфер символьных строк слишком маленький

В чем может быть ошибка?
Вызываю функцию, при в одном случае работает, в другом выдает ошибку

ociexecute() [function.ociexecute]: OCIStmtExecute: ORA-06502: PL/SQL: : буфер символьных строк слишком маленький ошибка числа или значения ORA-06512: на line 1

в PL/SQL тестил функцию, работает отлично.

вот он сама:

declare v_time date;
begin v_time:=to_date:)v_ts,’YYYY-MM-DD-HH24-MI-SS’);
:return := paket.fn_cash_save(
v_kazna_kassa_id => :v_kazna_kassa_id,
v_cash_date => :v_cash_date,
v_summa => :v_summa,
v_remarks => :v_remarks,
v_user_id => :v_user_id,
v_ts => v_time,
v_object_id => :v_object_id,
v_errormsg => :v_errormsg);
:v_ts := to_char(v_time,’YYYY-MM-DD-HH24-MI-SS’);
end;

если v_object_id передавать не 0, то все нормально, но иногда нужно, чтобы отправить именно 0.

I tried the following code different ways, like by taking out the while or the if, but when I put both together (if and while), I always get the error at the end…

undefine numero
set serveroutput on
accept numero prompt 'Type # between 100 and 999: '
declare
   i number:=1;
   a char(25);
   b char(1);
   c varchar2(10);
   d number;
begin
   c := №
   d := length(c);
   b := substr(c, i, 1);
   while i <= d loop
     if b = '1' then
       a:= a||'one ';
     end if;
     i := i+1;
   end loop;
   dbms_output.put_line('The number is '||a);
end;
/

ERROR:

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 13
06502. 00000 -  "PL/SQL: numeric or value error%s"

FIXED by changing how I declared the variable «a» to:

a varchar2(2000);

*Notice that here, the significant change is to use VARCHAR2 instead of CHAR (not the bigger length). According to @user272735 ‘s answer, that’s the key.

Вы можете получить сообщение об ошибке, указывающее, что мой буфер строки ошибок ora-06502 pl / sql слишком мал. Есть несколько способов решить эту проблему, и мы скоро разберемся с приложением.

Рекомендуется

  • 1. Скачать ASR Pro
  • 2. Следуйте инструкциям на экране, чтобы запустить сканирование.
  • 3. Перезагрузите компьютер и подождите, пока он завершит сканирование, а затем снова следуйте инструкциям на экране, чтобы удалить все вирусы, обнаруженные при сканировании компьютера с кодом ASR Pro.
  • Ускорьте свой компьютер сегодня с помощью этой простой в использовании загрузки. г.

    ORA-06502: Числовая ошибка PL / SQL, с другой стороны, количественная ошибка: слишком маленький буфер символьной строки. Ошибка возникает, когда символьная строка длиннее по сравнению с объявленной температурной переменной. Длина каждой строки не должна превышать размер нашего собственного типа данных, объявленного в переменной.

    ORA-06502: Числовая или значимая ошибка PL / SQL: слишком маленький числовой буфер. Ошибки возникают, когда расстояние строки местоположения превышает длину, относящуюся к этой конкретной объявленной символьной переменной. Разрыв строки не должен превышать размер типа захвата, объявленного в переменной.

    Я тестировал все следующие различные методы кода, такие как удаление while и as well if, но когда я обслуживаю их вместе (if и while), я все равно получаю сообщение об ошибке с обоих концов …

    p >

      номера справкиВключить вывод на серверNumero принимает причину «Введите № от 110 до 999:»Объяснять   I число: равно 1;  знак (25);   udemrrrket Dynamics (1);   c varchar2 (10);   телефонный номер ;начинать   Цельсия: = & число;   d: подразумевает длину (c);   j: = подстрока (c, i, 1);   написания цикла <= d     если b = '1', то       a: = сказочный || 'а';     Конец, если;     я: = я + 1;   Приемная петля;   dbms_output.put_line ('Счетчик равен' || a);Конец;/ 
      ORA-06502: PL или SQL: числовое значение или просто ошибка: буфер символьного цикла слишком малORA-06512: на линии 1306502.00000 "PL на SQL: числовое значение или значение ошибки% s" зона 
      a varchar2 (2000); 

    * Обратите внимание, что основное изменение здесь — это работа VARCHAR2 вместо CHAR (не самая длинная временная длина). Согласно ответу @ user272735, это всегда было каждым ключом.

    ORA-06502: PL / SQL: число или ошибка: слишком мала строка strm. Ошибка возникает, если длина выполнения строки символов намного дороже, чем длина объявленного регулируемого стиля. Значение не может быть присвоено переменной should, если размер значения, передаваемого с базой данных, превышает размер этой объявленной переменной. ORA-06502: PL / SQL: числовые, с другой стороны. Ошибка: строковый буфер со слишком маленьким значением, как правило, будет возвращен oracle. Эта ошибка возникает из-за того, что распознание вывода, хранящееся в этой переменной, длиннее, чем было объявлено.

    Длина вашей текущей строки не должна превышать машину того типа данных, который объявлен для изменения. В этом конкретном случае строку часто можно сохранить в переменной. Если длина призрачной марки превышает указанный размер смещения, кабель больше нельзя будет сохранить. Если выполняется проверка для присвоения атрибутов апелляции, создается исключение.

    Исключение

    Ошибка описывается следующим образом. Номер выбора указывает на ошибку. Длина данных вместе с переменной больше, чем длина значения. Следующая ошибка произошла недавно.

    Объявить

         void varchar2 (3);начинать    пустой: = 'A101';Конец;Указатели ошибок -ORA-06502: числовой pl / sql: или ошибка цены: буфер строки духа слишком малORA-06512: строка 406502.00000 1. "PL / SQL: значение слишком числовая ошибка% s"  

    В трассировке стека ошибок можно увидеть две ошибки ORA. Рядом с вероятностью ошибки отображается первое предприятие с ошибкой. Вторая ошибка кода указывает, в какой строке обычно возникает ошибка. Ошибка свидетельствует о том, что размер строки деталей, учитываемых при анализе, больше не соответствует присвоенному ей значению.

    Проблема

    Рекомендуется

    Ваш компьютер работает медленно? У вас проблемы с запуском Windows? Не отчаивайтесь! ASR Pro — это решение для вас. Этот мощный и простой в использовании инструмент проведет диагностику и ремонт вашего ПК, повысит производительность системы, оптимизирует память и повысит безопасность процесса. Так что не ждите — скачайте ASR Pro сегодня!

  • 1. Скачать ASR Pro
  • 2. Следуйте инструкциям на экране, чтобы запустить сканирование.
  • 3. Перезагрузите компьютер и подождите, пока он завершит сканирование, а затем снова следуйте инструкциям на экране, чтобы удалить все вирусы, обнаруженные при сканировании компьютера с кодом ASR Pro.
  • Невозможно описать строку, если она намного длиннее, чем тип размера объявленной переменной веб-типа данных. В этом случае ошибка может повториться. Источник статистики пытается присвоить строку, чтобы убедиться, что вы указали номер. Будет выдана ошибка, если вы посчитаете, что строка содержит больше времени, чем ширина переменной.

    ora-06502. Буфер строки запроса на ошибку pl / sql слишком мал

    В следующей затруднительной ситуации важны четыре личности. В частности, переменная объявляется длиной в три символа. Длина строкового значения превышает размер типа объявленной переменной. ORA-06502: Ошибка PL / SQL: ошибка числа или значения: буфер строки роли мал, все равно будет отображаться, если значение привело к небольшой переменной.

    Объявить

         void varchar2 (3);начинать     = пусто 'A101';Конец ;  

    до свидания

    Объявить

         бесполезный varchar2 (3);начинать    : = освободить 'A101';Конец;Страница ошибки -ORA-06502: PL / SQL: числовая ошибка или ошибка цены арены: строковый буфер слишком малORA-06512: на шпагате 406502.00000 3. PL / SQL: числовое значение или значение ошибки% s " 

    Причина

    Произошла математическая, числовая, строковая, преобразовательная ошибка или, возможно, ошибка ограничения. Например, конкретная ошибка возникает, когда вы пытаетесь установить NULL, чтобы получить хорошую переменную, объявленную как NON NULL, или когда вы пытаетесь использовать внешние бюро для целого числа больше 99, чтобы помочь вам идентифицировать переменную с помощью NUMBER (2) оператор.

    Действие

    Измените степень детализации, то, как она обрабатывается или как лучше всего ее объявить, чтобы сокровище определенно нарушало ограничения.

    Уникальное решение

    Часть значения, переданного в Oracle PS./SQL, превышает размер, указанный для уникального символьного типа поиска. Чтобы воспользоваться этим, необходимо изменить тип типа данных. Общий вид символьного типа данных должен быть лучше. Если я хочу, чтобы размер моего дизайна данных репутации был максимальным, добавленным к типу данных, следует использовать другую сортировку диска, чтобы удовлетворить большую любовь.

    Объявить

         обнулить varchar2 (4);начинать    пусто: = 'A101';Конец . . .  

    выход

      Процедура PL / SQL успешно завершена.  

    Двойное решение

    Очень важно стать широко известным благодаря ценному содержанию PL / SQL. Возможно, значение переменной было авторизовано некорректно и даже в одном методе произошла ошибка. После исправления значение be, безусловно, можно сохранить в переменной.

    Объявить

         varchar2 (4);начинать empid empid: указывает на «101»;Конец ;  

    выход

    ora-06502 pl / sql error character string load too small

      Процедура PL / SQL успешно выполнена.  

    Решение 3

    Во многих случаях присвоенное значение находится в определенном диапазоне объявленного типа данных. Размер значения регулярно достигает заявленного расстояния и ширины типа данных. В типичной ситуации мы не можем регулировать размер всех типов данных. Упущение необходимо исправить, а затем учесть в коде PL / SQL.

    Объявить

        обнулить varchar2 (3);начинать    пусто: = 'A101';исключение    ЕСЛИ ДРУГОЕ, ТО        пустой: = 0;Конец . . .  

    выход

    ora-06502 слишком маленький буфер строки аспекта ошибки pl / sql

      Транзакция PL / SQL завершена успешно.  

    Ускорьте свой компьютер сегодня с помощью этой простой в использовании загрузки. г.

    Сделайте так, чтобы вы могли SQL Designer (Инструменты / Настройки / База данных для NLS). Замените его на «СИМВОЛ». Как вы наверняка увидите, после изменения параметра плохие направляющие необходимо перекомпилировать, чтобы они стали «CHAR». Чтобы проверить, скомпилированы ли другие пакеты некорректно, воспользуйтесь этим запросом.

    Изменение числового значения на правильный диапазон цифр человека или изменение перехода на другой диапазон цифр, чтобы соответствовать значению, активирует ORA-06502.

    Как исправить слишком маленький буфер числовой строки PL SQL, а также символьной строки ошибки значения?

    Перейдите в помощь SQL Developer (Инструменты / Настройки / База данных и NLS). Замените его на «СИМВОЛ». Чтобы исправить эту конкретную основную проблему, вам необходимо перекомпилировать поврежденные пакеты после изменения конфигурации, чтобы убедиться, что у вас есть «CHAR». Чтобы увидеть, были ли другие инструменты скомпилированы неправильно, запустите этот раздел.

    Ora 06502 Pl Sql Error Character String Buffer Too Small
    Ora 06502 Pl Sql Error Zeichenkettenpuffer Zu Klein
    Ora 06502 Buffer Della Stringa Di Caratteri Di Errore Pl Sql Troppo Piccolo
    Ora 06502 Pl Sql Erreur Tampon De Chaine De Caracteres Trop Petit
    Ora 06502 Pl Sql Fout Karakter String Buffer Te Klein
    Ora 06502 Pl Sql Fel Teckenstrangbuffert For Liten
    Ora 06502 Pl Sql Erro De Caracteres String Buffer Muito Pequeno
    Ora 06502 Pl Sql 오류 문자열 버퍼가 너무 작습니다
    Ora 06502 Pl Sql Bufer De Cadena De Caracteres De Error Demasiado Pequeno
    Ora 06502 Blad Pl Sql Bufor Ciagu Znakow Za Maly

    г.

    Are you getting an ORA-06502 error message when working with Oracle SQL? Learn how to resolve it and what causes it in this article.

    ORA-06502 Cause

    The cause of the “ORA-06502 PL/SQL numeric or value error” can be one of many things:

    1. A value is being assigned to a numeric variable, but the value is larger than what the variable can handle.
    2. A non-numeric value is being assigned to a numeric variable.
    3. A value of NULL is being assigned to a variable which has a NOT NULL constraint.

    Let’s take a look at the solutions for each of these causes.

    The solution for this error will depend on the cause.

    Let’s see an example of each of the three causes mentioned above.

    Solution 1: Value Larger than Variable (Number Precision Too Large)

    In this example, we have some code that is setting a numeric variable to a value which is larger than what can be stored.

    Let’s create this procedure which declares and then sets a variable:

    CREATE OR REPLACE PROCEDURE TestLargeNumber
    AS
      testNumber NUMBER(3);
    BEGIN
      testNumber := 4321;
    END;

    If we compile it, it compiles with no errors.

    Procedure TESTLARGENUMBER compiled

    Now, let’s run the procedure.

    EXEC TestLargeNumber;

    We get an error:

    Error starting at line : 8 in command -
    EXEC TestLargeNumber
    Error report -
    ORA-06502: PL/SQL: numeric or value error: number precision too large
    ORA-06512: at "SYSTEM.TESTLARGENUMBER", line 5
    ORA-06512: at line 1
    06502. 00000 -  "PL/SQL: numeric or value error%s"
    *Cause:    An arithmetic, numeric, string, conversion, or constraint error
               occurred. For example, this error occurs if an attempt is made to
               assign the value NULL to a variable declared NOT NULL, or if an
               attempt is made to assign an integer larger than 99 to a variable
               declared NUMBER(2).
    *Action:   Change the data, how it is manipulated, or how it is declared so
               that values do not violate constraints.

    The error we’ve gotten is “ORA-06502: PL/SQL: numeric or value error: number precision too large”. It also includes an ORA-06512, but that error just mentions the next line the code is run from, as explained in this article on ORA-06512.

    This is because our variable testNumber can only hold 3 digits, because it was declared as a NUMBER(3). But, the value we’re setting it to a few lines later is 4 digit long (4321).

    So, the value is too large for the variable.

    To resolve it, increase the size of your variable, or manipulate your value to fit the size of the variable (if possible).

    In our example , we can change the size of the variable.

    CREATE OR REPLACE PROCEDURE TestLargeNumber
    AS
      testNumber NUMBER(4);
    BEGIN
      testNumber := 4321;
    END;
    Procedure TESTLARGENUMBER compiled

    Now, let’s run the procedure.

    EXEC TestLargeNumber;
    PL/SQL procedure successfully completed.

    The procedure runs successfully. We don’t get any output (because we didn’t code any in), but there are no errors.

    Read more on the Oracle data types here.

    Solution 2: Non-Numeric Value

    Another way to find and resolve this error is by ensuring you’re not setting a numeric variable to a non-numeric value.

    For example, take a look at this function.

    CREATE OR REPLACE PROCEDURE TestNonNumeric
    AS
      testNumber NUMBER(4);
    BEGIN
      testNumber := 'Yes';
    END;
    Procedure TESTNONNUMERIC compiled

    The procedure compiles successfully. Now, let’s fun the function.

    EXEC TestNonNumeric;
    Error starting at line : 8 in command -
    EXEC TestNonNumeric
    Error report -
    ORA-06502: PL/SQL: numeric or value error: character to number conversion error
    ORA-06512: at "SYSTEM.TESTNONNUMERIC", line 5
    ORA-06512: at line 1
    06502. 00000 -  "PL/SQL: numeric or value error%s"
    *Cause:    An arithmetic, numeric, string, conversion, or constraint error
               occurred. For example, this error occurs if an attempt is made to
               assign the value NULL to a variable declared NOT NULL, or if an
               attempt is made to assign an integer larger than 99 to a variable
               declared NUMBER(2).
    *Action:   Change the data, how it is manipulated, or how it is declared so
               that values do not violate constraints.

    The error we get is “ORA-06502: PL/SQL: numeric or value error: character to number conversion error”.

    This happens because our variable testNumber is set to a NUMBER, but a few lines later, we’re setting it to a string value which cannot be converted to a number

    To resolve this error:

    1. Ensure the value coming in is a number and not a string.
    2. Convert your string to a number using TO_NUMBER (the conversion might happen implicitly but this may help).
    3. Convert your string to the ASCII code that represents the string using the ASCII function.
    4. Change the data type of your variable (but check that your code is getting the right value first).

    The solution you use will depend on your requirements.

    Solution 3: NOT NULL Variable

    This error can appear if you try to set a NULL value to a NOT NULL variable.

    Let’s take a look at this code here:

    CREATE OR REPLACE PROCEDURE TestNonNull
    AS
      testNumber NUMBER(4) NOT NULL := 10;
      nullValue NUMBER(4) := NULL;
    BEGIN
      testNumber := nullValue;
    END;

    Procedure TESTNONNULL compiled

    Now, the reason we’re using a variable to store NULL and not just setting testNumber to NULL is because we get a different error in that case. Besides, it’s probably more likely that your NULL value will come from another system or a database table, rather than a hard-coded NULL value.

    Let’s run this function now.

    Error starting at line : 9 in command -
    EXEC TestNonNull
    Error report -
    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at "SYSTEM.TESTNONNULL", line 6
    ORA-06512: at line 1
    06502. 00000 -  "PL/SQL: numeric or value error%s"
    *Cause:    An arithmetic, numeric, string, conversion, or constraint error
               occurred. For example, this error occurs if an attempt is made to
               assign the value NULL to a variable declared NOT NULL, or if an
               attempt is made to assign an integer larger than 99 to a variable
               declared NUMBER(2).
    *Action:   Change the data, how it is manipulated, or how it is declared so
               that values do not violate constraints.

    We get the ORA-06502 error.

    This error message doesn’t give us much more information. But, we can look at the code on line 6, as indicated by the message. We can see we have a variable that has a NOT NULL constraint, and the variable is NULL.

    To be sure, we can output some text in our demo when it is null.

    CREATE OR REPLACE PROCEDURE TestNonNull
    AS
      testNumber NUMBER(4) NOT NULL := 10;
      nullValue NUMBER(4) := NULL;
    BEGIN
      IF (nullValue IS NULL) THEN
        dbms_output.put_line('Value is null!');
      ELSE
        testNumber := nullValue;
      END IF;
    END;

    Now let’s call the procedure.

    EXEC TestNonNull;
    Value is null!

    The output shows the text message, indicating the value is null.

    ORA-06502 character string buffer too small

    This version of the error can occur if you set a character variable to a value larger than what it can hold.

    When you declare character variables (CHAR, VARCHAR2, for example), you need to specify the maximum size of the value. If a value is assigned to this variable which is larger than that size, then this error will occur.

    For example:

    DECLARE
      charValue VARCHAR2(5);
    BEGIN
      charValue := 'ABCDEF';
    END;

    If I compile this code, I get an error:

    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at line 4

    This happens because the variable is 5 characters long, and I’m setting it to a value which is 6 characters long.

    You could also get this error when using CHAR data types.

    DECLARE
      charValue CHAR(5);
    BEGIN
      charValue := 'A';
      charValue := charValue || 'B';
    END;
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at line 5

    This error happens because the CHAR data type uses the maximum number of characters. It has stored the value of A and added 4 space characters, up until its maximum value of 5.

    When you try to concatenate a value of B to it, the resulting value is ‘A    B’, which is 6 characters.

    To resolve this, use a VARCHAR2 variable instead of a CHAR, and ensure the maximum size is enough for you.

    ORA-06502: pl/sql: numeric or value error: null index table key value

    Sometimes you might get this error message with the ORA-06502 error:

    ORA-06502: pl/sql: numeric or value error: null index table key value

    This means that either:

    • Your index variable is not getting initialized, or
    • Your index variable is getting set to NULL somewhere in the code.

    Check your code to see that neither of these two situations are happening.

    ORA-06502: pl/sql: numeric or value error: bulk bind: truncated bind

    You might also get this specific error message:

    ORA-06502: pl/sql: numeric or value error: bulk bind: truncated bind

    This is caused by an attempt to SELECT, UPDATE, or INSERT data into a table using a PL/SQL type where a column does not have the same scale as the column in the table.

    For example, you may have declared a variable in PL/SQL to be VARCHAR2(100), but your table is only a VARCHAR2(50) field. You may get this error then.

    You may also get this error because some data types in PL/SQL have different lengths in SQL.

    To resolve this, declare your variables as the same type as the SQL table:

    type t_yourcol is table of yourtable.yourcol%TYPE;

    So, that’s how you resolve the ORA-06502 error.

    Lastly, if you enjoy the information and career advice I’ve been providing, sign up to my newsletter below to stay up-to-date on my articles. You’ll also receive a fantastic bonus. Thanks!

    Возможно, вам также будет интересно:

  • Бурные овации лексическая ошибка
  • Бургман 650 ошибка f1
  • Бургер кинг ошибка отправки смс кода
  • Бургер кинг ошибка 6е1
  • Бургер кинг код ошибки 6e2

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии