gpt4 book ai didi

oracle - ORA-01400 无法插入空值...但我没有插入空值!

转载 作者:行者123 更新时间:2023-12-04 20:55:19 25 4
gpt4 key购买 nike

我正在尝试使用 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;

该行以前不存在,所以它是 insert命令的一部分是执行的命令。当然,我已经验证了所有列名和列值参数都正确放置在 SQL 文本中。

问题出在 VisitaLaboral柱子。它的类型为 NUMBER(1,0),它不接受 NULL,我试图插入一个 0 值。这是 Visual Studio 显示的关于相关联的 OracleParameter在命令执行之前:

enter image description here

但是,如果我直接在 Application Express 中执行命令(直接在命令文本中提供值),它工作正常并插入行。

那么,这里发生了什么? ODP.NET 库中是否存在错误,或者我做错了什么?

附加信息:
  • 数据库是 Oracle 10g Express 版本 10.2.0.1.0
  • Oracle.DataAccess.dll 版本为 4.112.1.2
  • 使用 Visual Studio 2010,面向 .NET 框架 4.0

  • 先感谢您!

    更新:

    如果我使用(已弃用) System.Data.OracleClient,一切正常类而不是 ODP.NET。

    WTF,甲骨文?不,真的,WTF?

    最佳答案

    您的问题似乎是您不知道数据库中实际发生了什么。最快的解决方案是找出发生了什么并使用它。

  • 连接数据库
  • 使用 dbms_session.set_sql_trace(true) 启用 sql 跟踪
  • 做你的申请行动
  • 与数据库断开连接
  • 查找 - 或询问您的 dba - 向您发送原始跟踪文件

  • 在跟踪文件(纯文本文件)中找到您的代码并查看出现错误时会发生什么。

    可能是触发器触发了......

    关于oracle - ORA-01400 无法插入空值...但我没有插入空值!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323359/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com