错误:ora-00907:oracle缺少右括号

u3r8eeie  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(369)

执行下面的查询时出现此错误,但选中的括号已完成。
错误:[错误:ora-00907:缺少右括号]{

import oracledb from 'oracledb'
 const { ORACLE_USER, ORACLE_PASSWORD } = ORACLE_CONFIG

connection = await oracledb.getConnection({
  user: ORACLE_USER,
  password: ORACLE_PASSWORD,
  connectString: 'xxxx'
})
console.log('------------------*************[Info] Successfully connected to Oracle!************-----------------')

const { customerId, flag, Name, insertDate } = params
const result = await connection.execute(`Insert into table1
    (customer_id, name, status_flag, insert_date, update_date)
     Values
    (${customerId}, ${Name}, ${flag}, TO_DATE(${insertDate}, 'MM/DD/YYYY HH24:MI:SS'), TO_DATE(${insertDate}, 'MM/DD/YYYY HH24:MI:SS'))`)
sulc1iza

sulc1iza1#

alessandro是对的-您使用的是模板字符串,它只是用字符串替换模板文本。因此,对于一些示例数据,运行时的insert语句实际上如下所示:

Insert into table1
(customer_id, name, status_flag, insert_date, update_date)
 Values
(111, Joe User, Y, TO_DATE(06/22/2020 16:07:00, 'MM/DD/YYYY HH24:MI:SS'), TO_DATE(06/22/2020 16:07:00, 'MM/DD/YYYY HH24:MI:SS'))

这不是有效的sql。您可以像alessandro建议的那样在模板字符串周围加单引号,这样可以解决问题,但是请注意,您的代码很容易受到sql注入的攻击。
节点oracledb文档中有一些使用绑定变量的示例,这是sql的最佳实践。例如,下面介绍如何使用“按位置绑定”语法:

const result = await connection.execute(`Insert into table1
    (customer_id, name, status_flag, insert_date, update_date)
     Values
    (:customerId, :name, :flag, TO_DATE(:insertDate, 'MM/DD/YYYY HH24:MI:SS'), TO_DATE(:insertDate, 'MM/DD/YYYY HH24:MI:SS'))`, 
  [ customerId, flag, Name, insertDate, insertDate ])
6za6bjd0

6za6bjd02#

代码中有很多没有撇号的字符串。假设 ${Name} , ${flag} 以及 ${insertDate} 如果是字符串,你需要在它们之前和之后加上' MM/DD/YYYY HH24:MI:SS .

相关问题