首页 文章

Oracle 11g“绑定变量不存在”

提问于
浏览
4

我在以下代码中得到“第15行中不存在”ORA01006绑定变量“错误:

DECLARE
  v_search_string varchar2(4000) := 'OK';
  v_query_str VARCHAR2(4000);
  match_count integer;
BEGIN  
  FOR t IN (SELECT owner,
                   table_name, 
                   column_name 
              FROM all_tab_columns
             WHERE data_type in ('CHAR', 'VARCHAR2', 'NCHAR', 'NVARCHAR2') And TABLE_NAME = 'T1' And OWNER = 'O1') 
  LOOP   
    Begin
      v_query_str := 'SELECT COUNT(*) FROM '|| t.table_name || ' WHERE ' || t.column_name || ' Like ''' || '%:1%' || '''';
      dbms_output.put_line(v_query_str);
      EXECUTE Immediate v_query_str
      INTO match_count  
      USING v_search_string; 
      IF match_count >= 0 THEN 
        dbms_output.put_line( t.owner || '.' || t.table_name ||' '||t.column_name||' '||match_count );
      END IF; 
    END;
  END LOOP;
END;

我只是试图循环遍历表中的所有字符列,并计算每个匹配v_search_string值的值 .

行“dbms_output.put_line(v_query_str);”打印一行:SELECT COUNT(*)FROM T1 WHERE Col1 Like'%:1%'

表中有10列是指定的类型 .

那里有一个绑定变量(%1),所以我无法弄清楚发生了什么 .

1 回答

  • 2

    形成如下所示的字符串 .

    t.column_name || ' Like ''%''||:1||''%'''
    

    绑定变量不应包含在单引号内,因为它将被视为字符串文字 . 因此,当你使用 USING 时,它最终会出现这种情况 .

相关问题