Ошибка неверное число oracle

Обновлено: 04.07.2024

Я сделал быстрый поиск, и некоторые сказали, что эта ошибка является результатом попытки загрузить числовые значения, которые должны быть строками? У меня нет Альфа-символов. Позже я найду min/max/avg всех столбцов, поэтому мне нужно, чтобы они были строками.

--Ошибка вставки для строк с 1 по 50
--ORA-01722: неверный номер

1 строка из 23 столбцов данных (включая 0):


25:33.5 - - - - - - -1.23 6.56 6.93 0 - - - - - 998.26 - - - - - - - 183.2 2.35 - 840 - - - - - - 1.56 -1.56 0 - - 0 - - - - - - - - 0 84.2 - 47.97 - - - - - - - - - - - - 0.81 0.48 - - - - - 0 11.37 4.5 -10.05 - - 13.3

У меня есть около 8 тысяч строк данных в этом файле, и это, конечно, не удалось на всех из них. Я довольно новичок в sql. Мой отец-эксперт по БД, я просто учусь программированию в школе/БД на стороне. Используя Oracle SQL, я попытался импортировать файл csv непосредственно в таблицу и правильно выбрал столбцы.

Кроме того, у меня есть примерно 20 files. any советов для новичка о том, как загружать их все одинаково?

Должен ли я заменить путь на

или прикрепить его непосредственно после слова path?

Два вопроса, я думаю, но я действительно хочу только выяснить эту ошибку. Второй вопрос-это meh.

2 ответа

Запрос: Select To_Number(qty) From my_table Where Выход: ORA-01722: invalid number 01722. 00000 - invalid number Запрос: Select qty From my_table Where Выход: 0.00080 Запрос: Select To_Number(0.00080) From Dual; Выход: 0.00080 (нет ошибки) Это странная ситуация, с которой я.

Я запустил запрос sql в oracle sql developer, и он работает просто отлично, но когда я использую оболочку, в данном случае adodb в excel vba, чтобы выполнить тот же запрос, я получаю ошибку. Я подозреваю, что adodb использует другую версию oracle, и оптимизация выполняется по-другому. Запрос.

Проблема в том, что вы тратите время без single quotes . Попробуйте ниже.

Такая ошибка означает, что вы пытаетесь вставить в числовой столбец значение, которое не может быть преобразовано в число. Не могли бы вы предоставить описание таблицы? Конечно, пожалуйста, используйте to_date('27-Sep-2016 19:25:33.467','dd-mon-yyyy hh24:mi:ss') при вставке даты, а не просто публикуйте 27-Sep-2016 19:25:33.467. Вы не должны вставлять дату без указания формата в функции to_date. У вас есть параметр NLS_DATE_FORMAT, который указывает, каков формат даты во время текущего сеанса. Но этот параметр зависит от сеанса, поэтому, если вы не используете to_date, ваш код не может работать на других клиентах.

Похожие вопросы:

У меня есть проблема, которая генерируется случайным образом (один раз между тысячными вызовами). Ошибка ORA-01722: недопустимое число генерируется случайным образом при выполнении обновления sql в.

как обновить emp_name с помощью неявного курсора в oracle. для этого я написал программу на языке pl / sql DECLARE var_names VARCHAR2(30); BEGIN UPDATE emp SET emp_name= emp_name +'garu'; IF.

У меня есть запрос, который я пытаюсь написать/запустить. Я могу заставить его возвращать результаты, если я добавлю фильтры WHERE и добавлю rownum < 100. Я могу продолжать увеличивать это, и.

Запрос: Select To_Number(qty) From my_table Where Выход: ORA-01722: invalid number 01722. 00000 - invalid number Запрос: Select qty From my_table Where Выход: 0.00080 Запрос.

Я запустил запрос sql в oracle sql developer, и он работает просто отлично, но когда я использую оболочку, в данном случае adodb в excel vba, чтобы выполнить тот же запрос, я получаю ошибку. Я.

У меня есть запрос, который хорошо работает, когда я запускаю его внутри sqlplus: SQL> SELECT T_0.ID AS ATTR_1_, T_0_0.ID AS ATTR_2_, CASE WHEN ( T_0.ID=1 AND ( T_0_0.ID=3 OR T_0_1.ID='val_1') ).

Получаю Ошибку SQL : ORA-01722: неверный номер во вставке SQL. Как проверить, какая строка или какое значение вызывает эту ошибку, потому что она не дает точного номера строки. SQL имеет более 200.

Я использую jdbcTemplate, чтобы вставить в DataBase Oracle некоторые данные. К сожалению, я получаю эту ошибку: java.sql.SQLSyntaxErrorException: ORA-01722: invalid Number Прежде всего, я преобразую.

Я получаю ORA-01722: недопустимое число, но только тогда, когда я select * from theView , но не тогда, когда я выбираю против theView напрямую (используя SQL внутри представления CREATE OR.

Я установил Oracle 11g Express Edition Release 2 в моей 64-битной ОС Windows 7 и попытался выполнить программу JDBC, затем я получил следующую ошибку:

Запуск OracleServiceXE вручную из сервисов у меня работал.

Я исправил эту проблему, исправив строку jdbc.

Например, правильная строка jdbc должна быть .

Но строка jdbs, которую я использовал .

(Примечание: между 1521 и XE должно быть / )

Эта плохая строка jdbc выдает мне ошибку ORA-12505.

Если вы используете /, это имя сетевого сервиса, если вы используете двоеточие, то это SID.

Есть несколько причин, которые могут вызвать эту проблему, но прежде чем начать работу с JDBC, вы должны быть уверены, что можете подключиться к базе данных с помощью SQL * Plus. Если вы не знакомы с SQL * Plus, это инструмент командной строки для подключения к базам данных Oracle, который долгое время был стандартной частью Oracle и включен в Oracle XE.

При подключении к базе данных Oracle с использованием JDBC вы не подключаетесь к базе данных напрямую. Вместо этого вы подключаетесь к слушателю TNS, который затем соединяет вас с базой данных. Ошибка ORA-12505 означает, что слушатель подключен, и вы можете подключиться к нему, но он не может подключить вас к базе данных, потому что не знает, что эта база данных работает. Для этого есть две причины:

Какие службы Oracle работают в оснастке «Службы»? (Откройте его из Панели управления> Администрирование> Службы или просто Пуск> Выполнить> services.msc .) Вам необходимо, чтобы службы OracleServiceXE и OracleXETNSListener были запущены.

Если обе службы были запущены, можете ли вы подключиться к базе данных в SQL * Plus, используя любое из следующего в командной строке? (Я предполагаю, что вы запускаете их на компьютере, на котором установлен Oracle XE.)

(Замените system-password на пароль, который вы установили для пользователей SYS и SYSTEM во время установки Oracle XE.)

Первые из этих трех подключаются через прослушиватель TNS, но вторые два подключаются напрямую к базе данных, не проходя через прослушиватель, и работают только в том случае, если вы находитесь на той же машине, что и база данных. Если первый сбой, но два других успешны, то соединения JDBC также потерпят неудачу. Если это так, подключитесь к базе данных, используя любой из двух других, и запустите ALTER SYSTEM REGISTER . Затем выйдите из SQL * Plus и снова попробуйте первую форму.

Если третий отказывает, но второй работает, добавьте свою учетную запись в группу ora_dba. Сделайте это в Панели управления> Управление компьютером> Локальные пользователи и группы.

После того, как вы можете получить соединения в форме

чтобы работать, вы должны иметь возможность подключиться к Oracle XE через JDBC. (Между прочим, вы не показали нам код JDBC, который вы используете для подключения к базе данных, но я подозреваю, что он, скорее всего, правильный; были бы другие ошибки, если бы части строки подключения были неправильными.)

пятница, 21 ноября 2008 г.

Ошибка ORA-01722: неверное число или ORA-01722: inval >

Обычно ошибка возникает при загрузки данных из текстового файла с помощью Oracle Sqlloader. Ошибка связана с тем, что в России разделитель целой и дробной часть запятая, а в США и Европе – точка.

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

1. Зайти в файл и заменить все точки на запятые. Например

1|New York|NY|7322564|1|2001|8307|-73.943849000|40.669800000|
заменяем на

Тут всеп просто. Никаких подводных камней, кроме того, что точки могут встречаться не только в числах и это надо отслеживать, иначе испортите данные.

Например в Linux это легко сделать с помощью sed (для Windows можно взять отсюда или использовать, скажем, perl). Команда не создает резервной копии.

2. В локальном файле при загрузке данных установить соответствующие параметры NLS.

Например, если загрузка осуществляется следующим скриптом батником:

то ошибки можно избежать с помощью выполнения предварительно в bat-файле вот такой команды:

Я считаю этот вариант наиболее предпочтительным.

3. Если это Windows, то можно изменить глобальные настройки NLS. Сделать это можно в реестре в веточке

Нужно будет вместо значения RUSSIAN_RUSSIA.CL8MSWIN1251 прописать AMERICAN_AMERICA.CL8MSWIN1251.

Это решение может очень сильно повлиять на систему в целом. Действие этого параметра может повлечь неработоспособность другого приложения.

Я выполнил запрос: select (LATITUDE) from db where sin(LATITUDE)

ORA-01722: неверный номер

ORA-02063: предыдущая строка из db

Если я изменяю sin(LATITUDE) в запросе:

LATITUDE (он не работает)

LATITUDE (он работает)

sin(LATITUDE) (он не работает)

to_number(sin(LATITUDE)) (он не работает)

sin(to_number(LATITUDE)) (он не работает)

Я в недоумении относительно того, почему я не могу заставить запрос работать без каких-либо ошибок, хотя он отлично работает в Oracle SQL Developer. Любая помощь будет оценена по достоинству.

Таким образом, кажется, что LATITUDE хранится как число, а некоторые из значений не являются числовыми.

Возможно, такой запрос поможет вам разобраться в проблеме:

Это не идеальный тест, но он часто работает.

Лучший метод использует регулярные выражения:

Следуя следствию в комментариях, это, по-видимому, является разницей в настройке NLS между прямым SQL-клиентом и ADODB-соединением. Поскольку вы храните число в виде строки (которая всегда является плохим идеей), а число имеет десятичный разделитель, разные настройки NLS_NUMERIC_CHARACTERS вызывают ошибку в одном месте, но не в другом.

Oracle использует этот параметр NLS при неявном преобразовании из строки в число или если у вас есть явный to_number() без маски формата. Поэтому в любой среде одно из этих операторов будет работать, а другое получит ошибку ORA-01722:

Который не работает, зависит от настройки NLS. Вы можете использовать явную маску формата, чтобы избежать этого, и третий параметр to_number() чтобы сказать, как его интерпретировать:

В предположении, что вы имеете дело с десятичными градусами, вы должны иметь возможность использовать:

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

Но вам также нужно сделать это явное преобразование везде, где вы ссылаетесь на него, например:

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

Более ранний ответ дал вариацию Гордону Линоффу, но оказался красной селедкой.

Базы данных

ORA-01722: неправильный номер

Причина:

Пробное преобразование символьной строки в числовую провалилось, потому что символьная строка не была правильной числовой литерой. Только числовые поля или символьные поля содержащие числовые данные могут быть использованы в арифметических функциях или выражениях. Только числовые поля могут быть добавлены или вычтены из данных.

Действие:

Проверьте символьные строки в функции или в выражении; убедитесь в том, что они содержат только числа, знаки, десятичные точки, и символ «E» или «e», затем повторите операцию.

ORA-01722 Ошибка, нужно разобраться
Есть таблица message в который один столбец results заполнен значениями 1 2 3 4 5 7 8 10. Я хочу.

Ошибка ORA-01722 при добавлении записи из Билдера в Оракл
Здравствуйте. Подскажите пожалуйста. Я пишу на билдере следующий код .


PL/SQL работа с курсором: ошибка: ORA-01722: Неверное число
Здравствуйте. При тестировании этого кода, выходит ошибка: ORA-01722: Неверное число. Не понимаю.

Delphi. Ошибка Invalid Number при получении полей из БД
Вот объясните дураку, где здесь ошибка? ADOQuery1.Active:=false; ADOQuery1.SQL.Clear;.

Покажите DDL таблицы.

Добавлено через 5 минут
Ну и заодно покажите методы gettext ваших классов.

Вот DLL который мне сгенерировал sqldeveloper(oracle) относительно моей таблицы Анализы_реактивы

Добавлено через 8 минут
Raidman,

Добавлено через 4 минуты
Raidman, метод getText это стандартный(Spring) из конструктора Netbeans, для получения значения из поля javax.swing.JTextField

Добавьте System.out.PrintLN(Query) и покажите результат.
Проблема в том, что происходит неявное преобразование типа от строкового к числовому. И возникает ошибка преобразования.

Добавлено через 1 минуту
Да я знаю что метод GetText стандартный, но его можно сделать override. У вас я так понял он не переписан.
Тогда показывайте строку которую отдаете на выполнение.

вот что мне выдало в консоли после того как нажал кнопку обновить


Вот я проверил все строки которые отдаю на выполнение в данной форме:
Самое смешное, что оно выполняет все запросы, но всё равно выдаёт ошибку Ну в этих операторах криминала нет. Хотя лучше использовать явное преобразование типа to_number или чтобы по феншую было убрать лишние кавычки вот так
Добавьте вывод строки в catch, чтобы точно знать на каком именно операторе падает.

изменил на вашу строку, всё равно одно и тоже

Добавлено через 18 минут
Проверил ещё одну таблицу!! Оно мне всегда выдаёт ошибку(ora-01722) когда у меня в WHERE указано число с типом NUMBER!! Может кто-то может подсказать что делать??

Oracle Express 11g

Добавлено через 1 час 38 минут
Raidman, извините, но мне надоело и я решил через костыль.

Читайте также: