加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

loopback-connector-oracle 主键Number类型长度为16位以上查询不

发布时间:2020-12-12 14:14:25 所属栏目:百科 来源:网络整理
导读:历史遗留问题,oracle表中主键Number类型,有13,14,15,16位长度主键,用loopback查询,如果主键16位长度的,查询不到数据。纠结了几天,修改以下代码解决了。粗暴的决绝方法 /** * Execute the SQL statement. * 查询数据 * @param {String} sql The SQL

历史遗留问题,oracle表中主键Number类型,有13,14,15,16位长度主键,用loopback查询,如果主键16位长度的,查询不到数据。纠结了几天,修改以下代码解决了。粗暴的决绝方法

/**
 * Execute the SQL statement.
 * 查询数据
 * @param {String} sql The SQL statement.
 * @param {String[]} params The parameter values for the SQL statement.
 * @param {Function} [callback] The callback after the SQL statement is executed.
 */
Oracle.prototype.executeSQL = function(sql,params,options,callback) {
  var self = this;

  //因为科技项目主键ID有13,14,15,16位的情况,在数据库主键Number存放16位数组的情况下,导致查不出数据,
  //故判断参数类型是否为number类型,且长度大于15的,把参数强转转换为string类型,进行查询
  //初略查看了oracle写的c++驱动代码,猜测是oracle c++参数类型为number时溢出导
  //详情查看 njsConnection.cpp类的 1624行代码 NJS_VALUETYPE_NUMBER 附近,c++不懂,所以改这里。
  if(params){
      for(var i = 0 ; i < params.length; i++ ){
          var temp = params[i];
          if(typeof temp === 'number' && temp.toString().length >= 15){
              params[i] = temp.toString();
          }
      }
  }

  //其他代码

}

主要是查询是,判断参数是否为number类型长度是否长于15位,如果是,强制转位string类型。即可解决。

愿君安好。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读