各位大佬
desc test;
LINEID NAME TYPE$ NULLABLE
1 ID INTEGER N
2 NAME VARCHAR(100 CHAR) Y
id为int auto_increment primary key
SQL语句:
create temporary table if not exists mytab_tmp(id int);
insert into test(name) values('name');
insert into mytab_tmp(id) values(scope_identity());
select * from mytab_tmp;
以上SQL语句在disql中执行没有问题:最后的select * from mytab_tmp能返回结果集;使用dmdb的nodejs客户端执行,最后的select * from mytab_tmp无行返回,js脚本如下:
import dmdb from 'dmdb'
async function dmtest() {
const pool = await dmdb.createPool({
connectString: 'dm://ne:Ne123456@localhost:5236'
})
const con = await pool.getConnection()
const sqls = [
`create temporary table if not exists mytab_tmp(id int);`,
`insert into test(name) values('name');`,
`insert into mytab_tmp(id) values(scope_identity());`,
`select * from mytab_tmp;`
]
for (const sql of sqls) {
const re = await con.execute(sql)
console.log(re.rows || re.rowsAffected)
}
con.release()
pool.close()
}
dmtest()
以上js脚本的输出如下
0
1
1
[]
这是为什么,按照我的理解:js脚本中的SQL语句都是在一个connection上执行的,也就是说是一个session,应该没问题的啊,不知道哪里出问题了。

可能得原因是 临时表默认是事务级别 如果开启了自动提交,提交或回滚后,临时表数据被清空。
可以在连接串配置一下试试:
localhost:5236?autoCommit=false