如何使用 % string compare 编写动态查询?
How to write dynamic query with % string compare?
我正在 pl/sql 过程中编写动态查询,我想在其中根据字符串比较操作检索记录。我将我的字符串存储在一个变量中,我想在查询中使用它。
x:='A';
select * from table_name where category like 'A%SITE';
我想以某种方式将上述内容转换为动态查询,并用变量 x 替换 'A%SITE' 中的 A,但我不确定该怎么做。
使用字符串连接:
DECLARE
x VARCHAR2(20);
cur SYS_REFCURSOR;
BEGIN
x := 'A';
OPEN cur FOR
select *
from table_name
where category like x || '%SITE';
-- Do something with the cursor.
END;
/
db<>fiddle here
关于你的评论:
EXECUTE IMMEDIATE 'select * from table_name where category like x || '%SITE''
您需要通过将引号加倍来转义引号,并且您可能还想使用绑定变量(以防止 SQL 注入攻击):
EXECUTE IMMEDIATE
'select * from table_name where category like :1 || ''%SITE'''
USING x;
但是,该查询中没有任何内容需要动态 SQL,如果您使用游标(按照我上面的示例)或使用SELECT ... [BULK COLLECT] INTO
.
我正在 pl/sql 过程中编写动态查询,我想在其中根据字符串比较操作检索记录。我将我的字符串存储在一个变量中,我想在查询中使用它。
x:='A';
select * from table_name where category like 'A%SITE';
我想以某种方式将上述内容转换为动态查询,并用变量 x 替换 'A%SITE' 中的 A,但我不确定该怎么做。
使用字符串连接:
DECLARE
x VARCHAR2(20);
cur SYS_REFCURSOR;
BEGIN
x := 'A';
OPEN cur FOR
select *
from table_name
where category like x || '%SITE';
-- Do something with the cursor.
END;
/
db<>fiddle here
关于你的评论:
EXECUTE IMMEDIATE 'select * from table_name where category like x || '%SITE''
您需要通过将引号加倍来转义引号,并且您可能还想使用绑定变量(以防止 SQL 注入攻击):
EXECUTE IMMEDIATE
'select * from table_name where category like :1 || ''%SITE'''
USING x;
但是,该查询中没有任何内容需要动态 SQL,如果您使用游标(按照我上面的示例)或使用SELECT ... [BULK COLLECT] INTO
.