Oracle - 在动态游标的 LIKE 子句中使用绑定变量
Oracle - using bind variable in LIKE clause of dynamic cursor
我正在使用动态游标来获取数据。正在执行的查询类似于:
query := 'SELECT column1, column2
FROM my_table
WHERE column1 LIKE ''%:bv1%''';
而游标本身是这样执行的:
OPEN my_cursor FOR query USING my_var1;
我也试过检查查询并打印它:
... WHERE column1 LIKE '%:bv1%' ...
因此撇号被转义,但游标未获取任何数据。甚至可以在 LIKE 子句中使用绑定变量吗?如果可以,我做错了什么?
从字符串中取出绑定变量:
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
这是一个微妙的问题。从静态语句开始,正确处理,然后将其转换为动态语句通常很有用 SQL.
在非动态 SQL 中,我们可能会这样做:
SELECT column1, column2
FROM my_table
WHERE column1 LIKE '%' || local_var || '%';
动态等价物是
query := 'SELECT column1, column2
FROM my_table
WHERE column1 LIKE ''%''||:bv1||''%'' ';
我正在使用动态游标来获取数据。正在执行的查询类似于:
query := 'SELECT column1, column2
FROM my_table
WHERE column1 LIKE ''%:bv1%''';
而游标本身是这样执行的:
OPEN my_cursor FOR query USING my_var1;
我也试过检查查询并打印它:
... WHERE column1 LIKE '%:bv1%' ...
因此撇号被转义,但游标未获取任何数据。甚至可以在 LIKE 子句中使用绑定变量吗?如果可以,我做错了什么?
从字符串中取出绑定变量:
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
这是一个微妙的问题。从静态语句开始,正确处理,然后将其转换为动态语句通常很有用 SQL.
在非动态 SQL 中,我们可能会这样做:
SELECT column1, column2
FROM my_table
WHERE column1 LIKE '%' || local_var || '%';
动态等价物是
query := 'SELECT column1, column2
FROM my_table
WHERE column1 LIKE ''%''||:bv1||''%'' ';