Ора-01722 - я знаю, что это значит, но это не проблема - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь вставить данные из старой таблицы в новую, но у меня ошибка ora-01722

Я пытаюсь сделать: to_number(trav_no), потому что в старой таблице trav_no - это varcharа в новом его number(3,0)

Что мне делать?

Select trav_no,
       edit_cod,
       amount,
       user_id
from t1;

insert into t2 (trip_id, type_id,f_amount, upd_by)
select to_number(trav_no),
       to_number(edit_cod),
       amount,
       user_id
from t1;

1 Ответ

2 голосов
/ 01 апреля 2019

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

Самый простой способ идентифицировать их - выбрать их с помощью регулярных выражений:

SELECT *
FROM T1
WHERE NOT REGEXP_LIKE(trav_no, '^[0-9]+$')
   OR NOT REGEXP_LIKE(edit_cod, '^[0-9]+$');

Запрос предполагает, что числа должны быть положительными целыми числами.Если нет, уточните регулярное выражение соответствующим образом.

...