错误:“ORA-01438:值大于此列允许的指定精度”故障因素:“空”详细信息:org.kxml2.kdom.Node@99c0b9c

Posted

技术标签:

【中文标题】错误:“ORA-01438:值大于此列允许的指定精度”故障因素:“空”详细信息:org.kxml2.kdom.Node@99c0b9c【英文标题】:Error: 'ORA-01438: value larger than specified precision allowed for this column' faultactor: 'null' detail: org.kxml2.kdom.Node@99c0b9c 【发布时间】:2017-10-07 08:07:27 【问题描述】:

我正在尝试使用 c# 更新 oracle 表记录。当我执行我的代码 SoapFault - faultcode: 'a:InternalServiceFault' faultstring: 'ORA-01438: value greater than specified precision allowed for this column' faultactor: 'null' detail: org.kxml2.kdom 时出现此错误。节点@99c0b9c。

这是我在服务端使用的代码:

[OperationContract]

public int pushData(string CustomObjects)


  List<CustomObject> myDeserializedObjList = (List<CustomObject>)Newtonsoft.Json.JsonConvert.DeserializeObject(CustomObjects, 
  typeof(List<CustomObject>));
  string constr = "my connection string";
  int rowid = 0;
  using(OracleConnection con = new OracleConnection(constr))

  con.Open();
  OracleCommand cmd = new OracleCommand();
  cmd.Connection = con;
  cmd.CommandType = CommandType.Text;

   foreach (CustomObject element in myDeserializedObjList)
   

      int num = element.num;

      string mydate = element.mydate;

      long num2 = element.num2;

      string user = element.user;


      string sqlStatement= "UPDATE CustomObjectS SET  num = :num, 
      mydate=:to_date(:mydate, 'YYYY/MM/DD HH:MI:SS'), num2=:num2, user=:user  WHERE num =:num";
      OracleTransaction myTrans;

      // Start a local transaction
      myTrans = con.BeginTransaction();
      // Assign transaction object for a pending local transaction
      cmd.Transaction = myTrans;
      cmd.CommandText=sqlStatement;
      cmd.Parameters.Add(new OracleParameter("num", num));
      cmd.Parameters.Add(new OracleParameter("user", user));
      cmd.Parameters.Add(new OracleParameter("num2", num2));
      cmd.Parameters.Add(new OracleParameter("mydate", mydate));
      cmd.Parameters[3].Value = mydate;


              rowid= cmd.ExecuteNonQuery();

              myTrans.Commit();



      


      


  return rowid;

      

请帮忙

【问题讨论】:

CustomObjectS的定义是什么? numnum2的数据类型(在数据库中)是什么? 它们的类型是数字 【参考方案1】:

ORA-01438: 大于指定精度的值允许这样做 专栏

此错误出现在 INSERT 或 UPDATE 语句期间。这意味着,您尝试为列分配的值超出了为此列定义的精度。 一个简单的例子:

CREATE TABLE abc1(
  x NUMBER(5)
);


INSERT INTO abc1( x ) values (123456 );
ORA-01438: value larger than specified precision allowed for this column


INSERT INTO abc1( x ) values (12345 ); 
1 row inserted.

你可以做什么:

为列分配一个较小的精度值(不要分配这么大的数字)。 更改表的定义以允许列中的精度更高。这可以通过 ALTER TABLE 语句来完成。
ALTER TABLE abc1 MODIFY x NUMBER(10);
Table ABC1 altered.

INSERT INTO abc1( x ) values (123456 );
1 row inserted.

【讨论】:

以上是关于错误:“ORA-01438:值大于此列允许的指定精度”故障因素:“空”详细信息:org.kxml2.kdom.Node@99c0b9c的主要内容,如果未能解决你的问题,请参考以下文章

Informix 错误:发生了语法错误。错误代码:-201

我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”

错误精灵错误跟踪器错误

网页打开显示错误500是啥意思

PHP错误处理

PHP的错误处理