将数据插入到具有日期数据类型和自动增量值的Oracle数据库中

clj7thdc  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(131)

我正在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而不是硬编码的值。

ldioqlga

ldioqlga1#

这很简单。你有两列

CREATE TABLE my_table (
id id_seq.nextval,
start_date DATE,
primary key(id) 
);

字符串
当你试图插入数据时,Oracle认为,你已经为所有列(包括id)设置了自己的值。只是不要将任何值放入id列,就像这样:

insert into my_table (start_date) values (:1)


你可以在这里玩:https://dbfiddle.uk/7jZpj-r4
顺便说一句,在这里你可以找到另一种技术:How to create id with AUTO_INCREMENT on Oracle?

flvtvl50

flvtvl502#

在Oracle 12中,您可以用途:

CREATE TABLE my_table (
  id         NUMBER GENERATED ALWAYS AS IDENTITY,
  start_date DATE,
  primary key(id) 
);

字符串
那么你的INSERT语句应该是:

INSERT INTO my_table (start_date) VALUES (:1)


或者:

INSERT INTO my_table (id, start_date) VALUES (DEFAULT, :1)


我有一个大约有100列的表,很难在insert语句中写出所有字段的名称
只要把它们写出来一次,这并不太难,而且可能比你花在问这个问题上的时间要少。
如果确实不能,那么就复制粘贴表中的req语句并删除位,直到只剩下列名。
或者,查询数据字典并从中复制粘贴:

SELECT LISTAGG(column_name, ',') WITHIN GROUP (ORDER BY column_id)
FROM   user_tab_columns
WHERE  table_name = 'MY_TABLE';


有很多方法可以解决写出列名的问题,你应该只需要解决一次这个小问题。
然后在Node中,当你想绑定值时。如果你有两列,其中一列是自动生成的,那么你只需要ONEbind value。

相关问题