Я пытаюсь вставить данные в таблицу 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
непосредственно перед выполнением команды:
Однако, если я выполняю команду прямо в Application Express (предоставляя значения непосредственно в тексте команды), она работает нормально и строка вставлена.
Итак, что здесь происходит? Есть ли ошибка в библиотеке ODP.NET или я что-то делаю не так?
Дополнительная информация:
Заранее спасибо!
ОБНОВЛЕНИЕ:
Все работает нормально, если я использую (устаревший) 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 - числовое поле, но когда я получаю запись, я получаю ошибку пожалуйста, посмотрите.