Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle数据库中搜索带转义符的字符串_Sql_Oracle - Fatal编程技术网

Sql 在Oracle数据库中搜索带转义符的字符串

Sql 在Oracle数据库中搜索带转义符的字符串,sql,oracle,Sql,Oracle,我试图在Oracle数据库中搜索值中包含%20或%2F的任何字符串。我正在查找的值来自一个未正确编码的网站,导致HTML URL编码被放置在值字符串中 我一直在使用以下脚本查找数据库中的数据,但发现无法为%符号包含转义子句 SET SERVEROUTPUT ON SIZE 100000 DECLARE match_count INTEGER; -- Type the owner of the tables you are looking at v_owner VARCHAR2(255)

我试图在Oracle数据库中搜索值中包含
%20
%2F
的任何字符串。我正在查找的值来自一个未正确编码的网站,导致HTML URL编码被放置在值字符串中

我一直在使用以下脚本查找数据库中的数据,但发现无法为
%
符号包含转义子句

SET SERVEROUTPUT ON SIZE 100000

DECLARE
  match_count INTEGER;
-- Type the owner of the tables you are looking at
  v_owner VARCHAR2(255) :='OWNER';

-- Type the data type you are look at (in CAPITAL)
-- VARCHAR2, NUMBER, etc.
  v_data_type VARCHAR2(255) :='VARCHAR2';

-- Type the string you are looking at
  v_search_string VARCHAR2(4000) :='%\%2F%' ESCAPE '\';

--'-- Added to fix syntax highlighting on SO

BEGIN
  FOR t IN (SELECT table_name, column_name FROM all_tab_cols where owner=v_owner and data_type = v_data_type AND table_name LIKE '%') LOOP

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

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

  END LOOP;
END;

您应该向查询中添加转义符,而不是变量

转义中的字符是转义%的字符。 查看oracle文档,而不是

EXECUTE IMMEDIATE 
'SELECT COUNT(*) FROM '||t.table_name||' WHERE '||t.column_name||' LIKE :1'
INTO match_count
USING v_search_string;
尝试使用

EXECUTE IMMEDIATE 
'SELECT COUNT(*) FROM '||t.table_name||' WHERE '||t.column_name||' LIKE ''' || v_search_string || ''''
INTO match_count;
看起来像是“大海捞针”类型的问题,与你的问题无关(我正在注销),但你可以改进你的搜索(一点点)。。。选择
,其中rownum=1
。您只需在列中找到一个匹配项,并在找到该列后停止搜索该列。“但发现我不能为%symbol包含转义子句”-确定您可以:
EXECUTE IMMEDIATE 
'SELECT COUNT(*) FROM '||t.table_name||' WHERE '||t.column_name||' LIKE ''' || v_search_string || ''''
INTO match_count;