如何使用 % 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.