declare
CURSOR cur_query IS
  select table_name, column_name, data_type from user_tab_columns;
  a number;
  sql_hard varchar2(2000);
  vv number;
begin
  for rec1 in cur_query loop
  a:=0;
  if rec1.data_type ='VARCHAR2' or rec1.data_type='CHAR' THEN
  a := 1;
  end if;
  if a>0 then
  sql_hard := '';
  sql_hard := 'SELECT count(*) FROM  '|| rec1.table_name ||' where '
  ||rec1.column_name|| ' like''00110000%''';
  --dbms_output.put_line(sql_hard); 
  execute immediate sql_hard INTO vv;
  IF vv > 0 THEN
   dbms_output.put_line(rec1.table_name||'--'||rec1.column_name);
  end if; 
  END IF;
  end loop;
end;大家看看老里有问题报错信息是18行命令未正确结束

解决方案 »

  1.   

    經測,在pl/sql中運行正常,未報錯
      

  2.   

    你执行这个
    select table_name, column_name, data_type from user_tab_columns;
    看看是不是存在一些特殊字符组成的table_name,例如BIN$85+atEUITBGLo3eWKLVgyg==$0
      

  3.   

    例如BIN$85+atEUITBGLo3eWKLVgyg==$0这些table_name应该是执行了例如drop table之后产生的一些资料,你要想办法把这部分资料过滤掉。
    根据你的实际情况,用table_name长度,OR正则表达式之类的方法过滤掉这些oracle自己产生的table_name
      

  4.   

    看all_tab_columns的owner,刚好你的问题,看下过滤掉sys owner的table_name是否就达到要求。