Ошибка преобразования символа в число - PullRequest
3 голосов
/ 31 января 2012
declare
   l_tot number := 0;

begin
   for i in 1..apex_application.g_f08.count loop
      l_tot := l_tot + nvl(to_number(apex_application.g_f08(i)),0);
   end loop;

 if l_tot = nvl(to_number(:P21_TOTAL_PRICE),0) then
      return true;
   else
      return false;
   end if;
end;

Получена ошибка ниже с кодом выше

ORA-06502: PL/SQL: numeric or value error: character to number conversion error

Ошибка произошла с :P21_TOTAL_PRICE.Что не так?Как я могу исправить это?

Ответы [ 2 ]

4 голосов
/ 31 января 2012

Вместо использования REPLACE вам следует использовать более мощную функцию REGEXP_REPLACE.http://www.orafaq.com/wiki/REGEXP_REPLACE

Затем вы можете удалить любой нечисловой символ из строки, а затем использовать функцию TO_NUMBER.

В вашем случае это будет что-то вроде:

REGEXP_REPLACE(:P21_TOTAL_PRICE, '[^0-9]+', ''); 

Смотрите мой ответ на почти тот же вопрос здесь: Функция Oracle To_Char Как обрабатывать, если это уже строка

2 голосов
/ 31 января 2012

Ошибка возникает из-за того, что число, которое вы представляете, на самом деле является символьной строкой, содержащей запятые и т. Д. Когда вы вводите to_number, Oracle не может заменить запятые.

Возможно, вы захотите использовать функцию replace для удаления запятых

Изменить

if l_tot = nvl(to_number(:P21_TOTAL_PRICE),0) then

до

if l_tot = nvl(to_number(replace(:P21_TOTAL_PRICE,',','')),0) then  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...