node.js - ExecuteMany 插入错误的值
问题描述
我正在使用带有节点(v10.14.2)的 oracledb(4.0.1)。我在下面有 json 列表;
[ { DIFFID: 8,
DIFFDATE: 2019-11-01T14:04:41.831Z,
REGIONNAMEA: 'TURKEY',
VENDORA: 'XXX',
SOURCECOUNT: 797,
DIFFCOUNT: 8,
PERCENTAGE: 99 },
{ DIFFID: 8,
DIFFDATE: 2019-11-01T14:04:41.831Z,
REGIONNAMEA: 'GERMANY',
VENDORA: 'XXX',
SOURCECOUNT: 440,
DIFFCOUNT: 8,
PERCENTAGE: 98.18 },
{ DIFFID: 8,
DIFFDATE: 2019-11-01T14:04:41.831Z,
REGIONNAMEA: 'FRANCE',
VENDORA: 'XXX',
SOURCECOUNT: 206,
DIFFCOUNT: 5,
PERCENTAGE: 97.57 } ]
通过 oracledb executeMany 方法,我会将该 json 列表插入到数据库中。这是我在下面调用该函数的方式;
const saveManySla = async (config, jList) => {
let test = [];
let connection;
try {
connection = await oracledb.getConnection(config);
test = await connection.executeMany(
`
INSERT INTO DAILY_DIFF_SLA
VALUES (SEQ_DAILY_DIFF_SLA.NEXTVAL, :DIFFID, :DIFFDATE, :REGIONNAMEA, :VENDORA, :SOURCECOUNT, :DIFFCOUNT, :PERCENTAGE)
`,
jList,
{
autoCommit: true
}
);
} catch (err) {
log.error(err, 'ora.saveManySla');
} finally {
if (connection) {
connection.close();
}
}
return test;
};
顺便说一句,在我第一次遇到这样的问题之前,我多次使用过 executeMany 方法。它错误地插入了 json 列表。这是它在下面的 DB 上的样子;
ID |DIFF_REPORT_ID|DIFF_DATE |REGION |VENDOR |SOURCE_COUNT|DIFF_COUNT|PERCENTAGE |
---|--------------|-------------------|--------------|-------|------------|----------|-------------------|
139| 8|2019-11-04 11:09:12|TURKEY |XXX | 797| 8| 99|
140| 8|2019-11-04 11:09:12|GERMANY |XXX | 440| 8|4636609220240232940|
141| 9|2019-11-04 11:09:13|FRANCE |XXX | 206| 5| 97.57|
如果我按“德国”过滤,我的 json 列表只有一项。然后我使用它记录正确的executeMany方法。
ID |DIFF_REPORT_ID|DIFF_DATE |REGION |VENDOR |SOURCE_COUNT|DIFF_COUNT|PERCENTAGE |
---|--------------|-------------------|--------------|-------|------------|----------|-------------------|
142| 8|2019-11-04 11:19:12|GERMANY |XXX | 440| 8| 98.18|
PERCENTAGE 列的数据类型是Number。
解决方案
JavaScript 还没有适当的小数支持。将 JavaScript 中的数字转换为字符串以避免转换错误。然后将字符串转换为数据库中的 Oracle 数字。
推荐阅读
- javascript - 从 JavaScript 获取 SSO 用户的 ID 或名称
- maven - 有什么方法可以并行运行 JUnit5 测试?
- mysql - Qt5程序无法在win7 64bit上连接mySql
- ios - 我可以模拟 NSHTTPURLResponse 的状态,但不能模拟它的 allHeaderFields
- jsf - Primefaces 中的延迟加载
- html - 滚动的 CSS-Grid 冻结列实现问题
- angular - 动态填充选择选项 Angular
- php - wordpress 自定义查询太慢了
- c++ - 蛮力任务的空输出
- java - 使用 Java 中的 if else 语句确定两个字符的字母顺序