Kon*_*man 5 oracle odp.net oracle-xe ora-01400
我试图通过使用来自C#应用程序的ODP.NET在Oracle表中插入数据,但是我得到一个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;
Run Code Online (Sandbox Code Playgroud)
该行以前不存在,因此它是insert
命令的一部分,即执行的那一行.当然,我已经验证所有列名和列值参数都正确放在SQL文本中.
问题出在VisitaLaboral
专栏中.它的类型为NUMBER(1,0),它不接受NULL,我试图插入值0.这是Visual Studio OracleParameter
在命令执行之前立即显示的关联:
但是,如果我直接在Application Express中执行命令(直接在命令文本中提供值),它可以正常工作并插入行.
那么,这里发生了什么?ODP.NET库中是否有错误,或者我做错了什么?
附加信息:
先感谢您!
更新:
如果我使用(已弃用的)System.Data.OracleClient
类而不是ODP.NET,一切正常.
WTF,甲骨文?不,真的,WTF?
归档时间: |
|
查看次数: |
7237 次 |
最近记录: |