我正在node.js中编写一个API来插入数据。
CREATE TABLE my_table (
id id_seq.nextval,
start_date DATE,
primary key(id)
);
字符串
现在我尝试像这样插入db
const connection = oracledb.getConnection(dbConfig)
let options = {
autoCommit: true,
bindDefs:[
{type: oracledb.NUMBER}, {type: oracledb.DATE}
]
}
let binds = [
[1,moment().format('YYYY-MM-DD HH:MM:SS')],
[2,moment().format('YYYY-MM-DD HH:MM:SS')]
]
const result = connection.executeMany('insert into my_table values(:1, :2, :3)', options, binds);
型
但是这个解决方案不起作用。有人能确认我犯了什么错误吗?还有,我如何添加动态自动增量id而不是硬编码的值。
2条答案
按热度按时间ldioqlga1#
这很简单。你有两列
字符串
当你试图插入数据时,Oracle认为,你已经为所有列(包括id)设置了自己的值。只是不要将任何值放入id列,就像这样:
型
你可以在这里玩:https://dbfiddle.uk/7jZpj-r4
顺便说一句,在这里你可以找到另一种技术:How to create id with AUTO_INCREMENT on Oracle?
flvtvl502#
在Oracle 12中,您可以用途:
字符串
那么你的
INSERT
语句应该是:型
或者:
型
我有一个大约有100列的表,很难在insert语句中写出所有字段的名称
只要把它们写出来一次,这并不太难,而且可能比你花在问这个问题上的时间要少。
如果确实不能,那么就复制粘贴表中的req语句并删除位,直到只剩下列名。
或者,查询数据字典并从中复制粘贴:
型
有很多方法可以解决写出列名的问题,你应该只需要解决一次这个小问题。
然后在Node中,当你想绑定值时。如果你有两列,其中一列是自动生成的,那么你只需要ONEbind value。