Ошибка Oracle Invalid number из С#

Я запускаю приведенный ниже код в своем приложении C# .Net, но продолжаю получать сообщение об ошибке ORA-01722: неверный номер. При запуске того же SQL непосредственно в PL/SQL Developer он делает именно то, о чем я прошу, без жалоб.

Что может быть причиной этого?

OracleCommand command = connection.CreateCommand();
command.CommandType = CommandType.Text;
command.CommandText = "insert into my_table ( select i.*, null from my_view i where i.usr_id is not null )";
command.ExecuteNonQuery();

Примечание. Я использую Oracle.DataAccess.Client.


person tkalve    schedule 11.08.2010    source источник
comment
проверьте типы столбцов в my_table и my_view, обычно это происходит, когда вы пытаетесь преобразовать символы в числа, то есть to_number('aaa')   -  person Michael Pakhantsov    schedule 11.08.2010
comment
Я проверил это, и все правильно. Я считаю, что если я попытаюсь преобразовать символы в числа, используя to_number() или путем сравнения, ошибка появится и в PL/SQL.   -  person tkalve    schedule 11.08.2010
comment
Пожалуйста, предоставьте операторы SQL для создания представления и таблицы, используемых в запросе. (Только поля и ограничения, если они есть, без ключей и индексов). Эти сценарии можно сгенерировать из PL/SQL Developer (просмотреть объект, просмотреть SQL в правом нижнем углу окна).   -  person ThinkJet    schedule 11.08.2010


Ответы (2)


Я нашел проблему. В одном из числовых столбцов в представлении в качестве десятичного разделителя использовалась запятая (,), а в таблице ожидалась точка (.).

Спасибо за помощь людям. :)

person tkalve    schedule 11.08.2010

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

person Alex Poole    schedule 11.08.2010
comment
Единственное, что упростилось, — это имена таблиц и представлений. Я протестировал указание всех имен столбцов, и я все еще получаю сообщение об ошибке. В моей таблице есть только типы столбцов varchar2 и number, и все числа могут быть преобразованы в числа с помощью to_number() в PL/SQL. - person tkalve; 11.08.2010
comment
Есть ли вероятность конфликта схем - вы подключены как один и тот же пользователь в обеих ситуациях? Есть ли триггеры, срабатывающие при вставке? - person Alex Poole; 11.08.2010