8

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

query := 'SELECT column1, column2 
          FROM my_table 
          WHERE column1 LIKE ''%:bv1%''';

游标本身是这样执行的:

OPEN my_cursor FOR query USING my_var1;

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

... WHERE column1 LIKE '%:bv1%' ...

所以撇号被转义,但游标不获取数据。甚至可以在 LIKE 子句中使用绑定变量,如果可以,我做错了什么?

4

2 回答 2

10

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

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

 SELECT column1, column2 
 FROM my_table 
 WHERE column1 LIKE '%' || local_var || '%'; 

动态当量是

query := 'SELECT column1, column2 
          FROM my_table 
          WHERE column1 LIKE ''%''||:bv1||''%'' ';
于 2017-05-22T13:05:36.337 回答
2

从字符串中取出绑定变量:

VARIABLE mycursor REFCURSOR;
VARIABLE bv1 VARCHAR2;

BEGIN
  :bv1 := 'X'; -- set the bind variable
END;
/

DECLARE
  query VARCHAR2(200) := 'SELECT * FROM DUAL WHERE DUMMY LIKE :value';
BEGIN
  OPEN :mycursor FOR query USING '%' || :bv1 || '%';
END;
/

PRINT mycursor;

输出

MYCURSOR
--------
DUMMY
-----
X
于 2017-05-22T12:53:17.940 回答