Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Странная ошибка с преобразованием в число  [new]
Opus Magnum
Member

Откуда: 77 Rus
Сообщений: 2205
Добрый день!

Имею запрос
select to_number (replace (pk, '*')) from test_table where [conditions]

Получаю набор данных, все в порядке

Иду дальше
select iddqd from table 1
union
select to_number (replace (pk, '*')) from test_table where [conditions]
minus
select idkfa from table2 where [conditions2]

Получаю набор данных, все в порядке

Иду дальше
select * from (
select iddqd from table 1
union
select to_number (replace (pk, '*')) from test_table where [conditions]
minus
select idkfa from table2 where [conditions2]) where iddqu = 123456

получаю ошибку ORA-01722: неверное число

Добавлять в запрос с REPLACE условия "WHERE pk is not null" или другие запреты на пустые строки или текстовые не помогает.

Подскажите пожалуйста, что может быть не так?

11.2.0.3.0 ЕЕ
3 мар 16, 12:06    [18891313]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Alex__kK
Member

Откуда:
Сообщений: 240
Opus Magnum,

Может в iddqd from table 1 есть данные которые нельзя привести к числу?
3 мар 16, 12:15    [18891376]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
пушистый предикат
Guest
Opus Magnum
Получаю набор данных
получаешь не весь набор
3 мар 16, 12:17    [18891385]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
almswiss
Member

Откуда:
Сообщений: 105
Opus Magnum,

Закрыть скобку?
3 мар 16, 12:17    [18891387]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Opus Magnum
Member

Откуда: 77 Rus
Сообщений: 2205
Alex__kK,

В данный момент проверяю - таблицы пусты. Данные есть только в таблице test_table.

almswiss,

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

пушистый предикат,

Пробую проверить по нечисловым значениям (regexp_like (pk, '\d{2,9}')) и получаю тот же результат.
Возможно, просто недопонимаю Ваши слова.
3 мар 16, 12:24    [18891422]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Opus Magnum
Member

Откуда: 77 Rus
Сообщений: 2205
select * from (select to_number (replace (pk, '*')) iddqu from test_table where [conditions]) where iddqu = 123456

также получаю ошибку ORA-01722: неверное число
Я понимаю, что выглядеть это может смешно и глупо, но как не пробую - один фиг.
3 мар 16, 12:34    [18891484]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Opus Magnum
select * from (select to_number (replace (pk, '*')) iddqu from test_table where [conditions]) where iddqu = 123456

также получаю ошибку ORA-01722: неверное число
Я понимаю, что выглядеть это может смешно и глупо, но как не пробую - один фиг.
Если test_table - это на самом деле вьюха, то получить просто из-за другого плана.

PS. А что мешает для начала убрать to_number?
3 мар 16, 12:52    [18891604]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Opus Magnum
Member

Откуда: 77 Rus
Сообщений: 2205
dbms_photoshop,

Это таблица, планы проверены, отличаются конечным набором данных (cardinality и bytes).

Пока решу вот так: regexp_replace (pk, '[^0-9]+', '').
3 мар 16, 12:55    [18891625]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Opus Magnum
dbms_photoshop,

Это таблица, планы проверены, отличаются конечным набором данных (cardinality и bytes).

Пока решу вот так: regexp_replace (pk, '[^0-9]+', '').

только вы бы - хотя бы посмотрели, что у вас там за хрень, вместо чисел
3 мар 16, 13:50    [18891995]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
orawish,
и так сойдет, дело то житейское))

Opus Magnum ,
а так работает?
select * from (select (replace (pk, '*')) iddqu from test_table where [conditions]) where iddqu = '123456'

может ты просто noclip забыл))
3 мар 16, 14:11    [18892135]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Opus Magnum
Member

Откуда: 77 Rus
Сообщений: 2205
orawish,

Там возвращается пустая строка (или неотображаемый символ).
Ставить в условие replace (pk, '*') is null не помогло.

Vint,

Так как операция разовая и этой записи с неправильным id не затрагивает, то сойдет.
Но мне надо будет разобраться с ней позже, когда закончу с другими проблемами.
Так работает.
Судя по всему я просто туплю и надо взять и исправить нечисловое поле.
3 мар 16, 16:58    [18893223]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Opus Magnum,

dump()-ом не поделитесь?
3 мар 16, 17:13    [18893293]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Opus Magnum
Member

Откуда: 77 Rus
Сообщений: 2205
--Eugene--,

Не-а.
Меня СБ за это может сильно огорчить, так как придется через почту пересылать.
На форуме сижу с личного ноутбука через Йота-модем.
3 мар 16, 17:15    [18893305]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Opus Magnum,
это правда так сложно найти строки с не числовыми символами или вы просто раздуваете тривиальную задачу до слона? translate() is not null?
3 мар 16, 17:18    [18893327]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
stax..
Guest
Opus Magnum,

самое простое чтоб найти, скан в pl/sql блоке
смотреть на чем(где) слетит преобразование в число

.....
stax
3 мар 16, 17:20    [18893336]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
stax..
Guest
Vint
Opus Magnum,
это правда так сложно найти строки с не числовыми символами или вы просто раздуваете тривиальную задачу до слона? translate() is not null?


SQL> select translate('1.1.1','a1234567890.-+Ee','a') ch from dual;

CH
----------
null

SQL>


.....
stax
3 мар 16, 17:24    [18893361]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
stax..,

SQL> select translate('1.1.1','a1234567890.-+Ee','xxxxxxxxxxxxxxxx') ch from dual;

CH
-----
xxxxx
3 мар 16, 17:34    [18893434]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
stax..
Guest
--Eugene--
stax..,

SQL> select translate('1.1.1','a1234567890.-+Ee','xxxxxxxxxxxxxxxx') ch from dual;

CH
-----
xxxxx


как с помощью етого проветить что '1.1.1' invalid number?

SQL> select to_number('1.1.1') ch from dual;
select to_number('1.1.1') ch from dual
                 *
ERROR at line 1:
ORA-01722: invalid number


.....
stax
3 мар 16, 17:40    [18893461]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
stax..
как с помощью етого проветить что '1.1.1' invalid number?
да, но с помощью вашего
stax..
SQL> select translate('1.1.1','a1234567890.-+Ee','a') ch from dual;

CH
----------
null
тем более никак
3 мар 16, 17:48    [18893493]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
stax..
Guest
--Eugene--
stax..
как с помощью етого проветить что '1.1.1' invalid number?
да, но с помощью вашего
stax..
SQL> select translate('1.1.1','a1234567890.-+Ee','a') ch from dual;

CH
----------
null
тем более никак

звичайно
то я Vint -у хотел показать что простеньким транслате+null не решить

.....
stax
3 мар 16, 18:44    [18893742]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
пушистый пердикот
Guest
Возвращаясь к первому посту, очевидно, что замены звездочки не достаточно, а автор изучает не всю таблицу а только в пределах ограниченного conditionsами сознания. Да еще и юнионами остатки запыливает.
with t(a,b) as (
select level, case when level=1 then 'первый' else to_char(level) end from dual connect by level <= 100
)
select sum(x)
from (
   select to_number(b) x from t where a > 1
) tt
where 33 = 33;

SUM(X)
------
  5049

with t(a,b) as (
select level, case when level=1 then 'первый' else to_char(level) end from dual connect by level <= 100
)
select sum(x)
from (
   select to_number(b) x from t where a > 1
) tt
where  x = 33;

ORA-01722: invalid number
3 мар 16, 19:45    [18893951]     Ответить | Цитировать Сообщить модератору
 Re: Странная ошибка с преобразованием в число  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
stax..
то я Vint -у хотел показать что простеньким транслате+null не решить

учитывая как автор выдает информацию - я на 99% уверен что я прав и автору нужны целые положительные числа. а общий случай конечно так просто не проверить.
4 мар 16, 10:39    [18895530]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить