Oracle-在动态游标的LIKE子句中使用绑定变量

Pet*_*bik 5 oracle dynamic-sql cursor bind-variables

我正在使用动态光标来获取数据。正在执行的查询类似于:

query := 'SELECT column1, column2 
          FROM my_table 
          WHERE column1 LIKE ''%:bv1%''';
Run Code Online (Sandbox Code Playgroud)

游标本身是这样执行的:

OPEN my_cursor FOR query USING my_var1;
Run Code Online (Sandbox Code Playgroud)

我也尝试检查查询并打印它:

... WHERE column1 LIKE '%:bv1%' ...
Run Code Online (Sandbox Code Playgroud)

因此省略了撇号,但光标没有获取任何数据。甚至可以在LIKE子句中使用绑定变量,如果可以,我做错了什么?

APC*_*APC 5

这是一个微妙的。从静态语句开始,正确处理,然后将其转换为动态SQL,通常很有用。

在非动态SQL中,我们可以这样做:

 SELECT column1, column2 
 FROM my_table 
 WHERE column1 LIKE '%' || local_var || '%'; 
Run Code Online (Sandbox Code Playgroud)

动态等效项是

query := 'SELECT column1, column2 
          FROM my_table 
          WHERE column1 LIKE ''%''||:bv1||''%'' ';
Run Code Online (Sandbox Code Playgroud)