Прерывистые ошибки Ora 1722, вызванные to_number - PullRequest
1 голос
/ 20 июля 2011

Я работаю над проблемой, которую просто не могу понять, но думаю, что сегодня добился определенного прогресса. В предложении where есть следующий код:

AND to_number(REPLACE(TRANSLATE ( decode( INSTR(hra_ans.answer_text, '.',1 , 2), 0 , UPPER(hra_ans.answer_text) , 0),'ABCDEFGHIJKLMNOPQURSTWVXYZ+<>:',' '), ' ','')) >= 10

Теперь этот столбец hra_ans.answer_text может содержать что угодно: от «>» до «> 15», «13,68», «без результатов», до «1.2.3.4» и т. Д. Ошибка недопустимого числа возникает только периодически, не каждый время. Я попытался заменить Translate на Regexp_Replace, используя выражение '[^ 0-9.]', Но это тоже не решает проблему. Я нашел это на SO:

Вот похожий вопрос, на который я наткнулся.

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

Спасибо!

1 Ответ

1 голос
/ 20 июля 2011

Если вы можете объявить новую функцию, возможно, самый простой вариант - сделать что-то вроде

CREATE FUNCTION my_to_number( p_str IN VARCHAR2 )
  RETURN NUMBER
IS
  l_num NUMBER;
BEGIN
  BEGIN
    l_num := to_number( p_str );
  EXCEPTION
    WHEN others THEN
      l_num := NULL;
  END;

  RETURN l_num;
END my_to_number;

и затем используйте это в своем запросе

AND my_to_number( hra_ans.answer_text ) >= 10

Держу пари, что в столбце ANSWER_TEXT есть данные, которые не превращаются в действительные числа вашими функциями обработки строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...