Sql 在整个oracle数据库中搜索字符串的一部分

Sql 在整个oracle数据库中搜索字符串的一部分,sql,oracle,plsql,Sql,Oracle,Plsql,我试图在整个Oracle数据库中查找特定字符串 我在关于here()的另一个主题中遵循了这个示例,当字符串是列中的整个值时,它就起作用了。但是我需要搜索字符串作为列的一部分 例如,如果我搜索“Alert”,它应该返回所有在中带有“Alert”的列和所有带有“Alert_QB”的列 这是目前的问题: DECLARE match_count INTEGER; BEGIN FOR t IN (SELECT owner, table_name, column_name

我试图在整个Oracle数据库中查找特定字符串

我在关于here()的另一个主题中遵循了这个示例,当字符串是列中的整个值时,它就起作用了。但是我需要搜索字符串作为列的一部分

例如,如果我搜索“Alert”,它应该返回所有在中带有“Alert”的列和所有带有“Alert_QB”的列

这是目前的问题:

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

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

    EXCEPTION when others then
    null;
    end;

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

  END LOOP;

END;
/
我认为这接近于“使用‘提醒’;”这一行,我需要添加一些东西,但我不知道是什么

谢谢

将其更改为

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

可以使用通配符
%
字符连接绑定变量:

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

请注意,单引号必须通过将它们加倍来转义。

其中t.column_name像“%”| |:1 | |“%”
我不确定,但这看起来不太正确,因为t.column_name应该在引号之外,不是吗?和:1英寸。那么也许?其中| t.column| u name | like%:1%'但你的和我的都不起作用。我在你的代码中遇到了一个错误,说“引用的字符串没有正确终止”;您需要以不同的方式引用所有内容,但应该能够应用该概念。百分比符号是使用“使用“%ALERT%”提供的