【问题标题】:How can I use `USING` clause with `LIKE` operator in PL/SQL?如何在 PL/SQL 中将 `USING` 子句与 `LIKE` 运算符一起使用?
【发布时间】:2017-02-02 06:56:15
【问题描述】:

我有一个 PL/SQL,我想在其中执行搜索。 PL/SQL 是

DECLARE
      match_count INTEGER;
    BEGIN
      FOR t IN (SELECT owner, table_name, column_name
                  FROM all_tab_columns
                  WHERE table_name='GETS_TS_EGU_LOOKUP' and data_type LIKE '%CHAR%') LOOP

        EXECUTE IMMEDIATE
          'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
          ' WHERE '||t.column_name||' = :1'
          INTO match_count
          USING 'NONE';

        IF match_count > 0 THEN
          dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
        END IF;

      END LOOP;

    END;
    /

此 PL/SQL 可以对关键字 NONE 执行查找。我想在 NONE 上执行 LIKE 搜索,例如 %NONE%

我该怎么做?

有可能吗?

【问题讨论】:

  • 你想做什么??

标签: sql database oracle plsql


【解决方案1】:

应该是这样的

EXECUTE IMMEDIATE
  'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
  ' WHERE ' || t.column_name || ' like ''%'' || :1 || ''%'''
  INTO match_count
  USING 'NONE';

但既然 'NONE' 是一个常数,为什么不简单:

EXECUTE IMMEDIATE
  'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
  ' WHERE ' || t.column_name || ' like ''%NONE%'''
  INTO match_count;

【讨论】:

    【解决方案2】:

    您可以声明一个新变量来分配您要搜索的字符串,然后您可以在查询中使用它,如下所示

        DECLARE
              match_count INTEGER;
             srch_str varchar2(20);
            BEGIN
              srch_str:= 'NONE'
              FOR t IN (SELECT owner, table_name, column_name
                          FROM all_tab_columns
                          WHERE table_name='GETS_TS_EGU_LOOKUP' and data_type LIKE '%CHAR%') LOOP
    
                EXECUTE IMMEDIATE
                  'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
                  ' WHERE '||t.column_name||' like ''%'||srch_str||'%'''
                  INTO match_count;
    
                IF match_count > 0 THEN
                  dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
                END IF;
    
              END LOOP;
    
            END;
    

    它会工作得很好。

    【讨论】:

    • 接受用户的搜索字符串时要注意SQL注入!
    猜你喜欢
    • 1970-01-01
    • 2011-03-21
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2010-11-28
    • 2017-04-01
    • 2023-02-24
    相关资源
    最近更新 更多