我正在使用动态游标获取数据。正在执行的查询类似于:
query := 'SELECT column1, column2
FROM my_table
WHERE column1 LIKE ''%:bv1%''';
字符串
而游标本身是这样执行的:
OPEN my_cursor FOR query USING my_var1;
型
我也试着检查查询并打印它:
... WHERE column1 LIKE '%:bv1%' ...
型
所以撇号被转义了,但是游标不获取数据。在LIKE子句中使用绑定变量是可能的吗?如果是,我做错了什么?
3条答案
按热度按时间y0u0uwnf1#
这是一个微妙的问题,通常从静态语句开始,正确处理,然后将其转换为动态SQL是有用的。
在非动态SQL中,我们可以这样做:
字符串
动态等效值为
型
qnakjoqk2#
从字符串中取出bind变量:
字符串
输出
型
h79rfbju3#
对于任何碰巧经过的人,你也可以把
%
的值放在bind-string本身中:字符串
输出为:
型
这个解决方案比公认的答案更动态,因为它让你的用户/客户端应用程序选择是否使用
%
匹配,而不是每个搜索都必须在整个字符串上进行。根据你的数据集和表结构,这 * 可能 * 会极大地影响您的性能,因为搜索字符串上的前面%
(例如在接受的答案中强制使用%:bv1%
)通常意味着优化器不能使用索引。**免责声明:**仅在Oracle 19中测试!