Node.js 如何在node oracledb中进行模式匹配查询

Node.js 如何在node oracledb中进行模式匹配查询,node.js,oracle,Node.js,Oracle,我正在尝试使用执行一个简单的查询,其中使用与WHERE子句中的类似,但是我似乎不知道如何执行。这似乎不起作用 const baseQuery = `select item, item_desc from item_master where item_level=tran_level and item like '%:item%'`; const binds = { item: '550' }; const result = await conn.execute(ba

我正在尝试使用
执行一个简单的查询,其中使用
WHERE
子句中的
类似,但是我似乎不知道如何执行。这似乎不起作用

const baseQuery = 
 `select item, item_desc
    from item_master
   where item_level=tran_level
     and item like '%:item%'`;

const binds = { item: '550' };
const result = await conn.execute(baseQuery, binds, {});
它不断地在下面抛出错误-

[Error: ORA-01036: illegal variable name/number] {
  errorNum: 1036,
  offset: 0
}

我已经阅读了node oracledb文档,但是这个看似简单的模式匹配查询用例似乎没有在任何地方被记录下来。是否支持模式匹配?如果是,那么我做错了什么?

这在你的交叉帖子中得到了回答

在SQL语句中使用普通绑定变量(这对于可伸缩性和安全性很重要,因此数据永远不会被视为SQL语句的一部分)。然后将任何模式匹配语法连接到数据

引用sla100在GitHub问题上的回答:

SQL:

和类似于:item的项目

JS:

const binds={item:'%550%}


您可以通过LIKE比较和REGEXP_LIKE来实现这一点。节点oracledb文档中也有这样做的示例。

只是好奇为什么带有绑定的
和类似“%:item%”的项不起作用,但是
和类似“%1234%”的项
起作用?因为SQL文本和数据文本之间是分离的。引号中的冒号只是数据中的冒号,不会被解析为绑定变量。因此,如果我们从等式中去掉引号中的冒号,如
和item like%:item%
const binds={item:'550'}
似乎不起作用,SQL查询文本内部是否包含引号?不包含引号;它们描绘了JS字符串。节点oracledb将此字符串绑定到SQL语句中的
:项
。关键是数据需要
%
,而不是SQL语句文本。