ORA-01400 не может вставить нулевое значение… но я НЕ вставляю нулевое значение!

Я пытаюсь вставить данные в таблицу Oracle с помощью ODP.NET из приложения C #, но получаю сообщение ORA-01400 не может вставить ошибку нулевого значения для столбца в котором я НЕ вставляю нулевое значение.

Это урезанная версия параметризованной команды SQL, которую я пытаюсь выполнить. Он заключен в OracleCommand и выполняется с вызовом ExecuteNonQuery :

declare c int; 
begin
   select count(*) into c from "Entradas" where "Id" = :Id and nvl("AppId", 0) = nvl(:AppId, 0);
   if c>0 then
       update "Entradas" set
         /*...a bunch of columns...*/,
         "VisitaLaboral" = :VisitaLaboral,
         /*...some more columns...*/
         where "Id" = :Id and nvl("AppId",0) = nvl(:AppId, 0); 
   else
       insert into "Entradas" (
         /*... a bunch of columns...*/,
         "VisitaLaboral",
         /*...some more columns...*/
         ) values (
         /*...a bunch of values...*/,
         :VisitaLaboral,
         /*...some more values...*/
       );
   end if;
end;

Строка не существует ранее, поэтому это часть команды insert . тот, который выполняется. Конечно, я убедился, что все имена столбцов и параметры значений столбцов правильно помещены в текст SQL.

Проблема находится в столбце VisitaLaboral . Он имеет тип NUMBER (1,0), он не принимает значения NULL, и я пытаюсь вставить значение 0. Это то, что Visual Studio отображает о связанном OracleParameter непосредственно перед выполнением команды:

enter image description here

Однако, если я выполняю команду прямо в Application Express (предоставляя значения непосредственно в тексте команды), она работает нормально и строка вставлена.

Итак, что здесь происходит? Есть ли ошибка в библиотеке ODP.NET или я что-то делаю не так?

Дополнительная информация:

  • База данных - Oracle 10g Express Release 10.2.0.1.0
  • Версия Oracle.DataAccess.dll - 4.112. 1.2
  • Использование Visual Studio 2010, таргетинг на .NET framework 4.0

Заранее спасибо!

ОБНОВЛЕНИЕ:

Все работает нормально, если я использую (устаревший) System.Data.OracleClient вместо ODP.NET.

WTF, Oracle? Нет, правда, но я получаю ошибку, я пробовал использовать функцию cast и convert. например, выберите convert (varchar (10), StandardCost + 'S') ...

Я пытаюсь получить запись с помощью добавления некоторого алфавита в мой числовой столбец. но я получаю ошибку, я пробовал использовать функцию cast и convert.

для exmaple

select convert(varchar(10),StandardCost +'S')
from DimProduct where ProductKey = 212

здесь StandardCost - числовое поле, но когда я получаю запись, я получаю ошибку пожалуйста, посмотрите.

17
задан Ocaso Protal 16 March 2011 в 09:44
поделиться