---最好分析下表 SQL> create table tb_joe(name varchar2(10)) 2 /表已创建。SQL> insert into tb_joe values('testtest');已创建 1 行。SQL> commit 2 /提交完成。SQL> declare 2 v_tbname varchar2(30); 3 v_colname varchar2(30); 4 num number; 5 str varchar2(1000); 6 begin 7 for i in (select a.table_name,a.column_name,num_rows from user_tab_cols a,user_tables b 8 where a.table_name=b.table_name and num_rows<101 and data_type in('VARCHAR','VARCHAR2','CHAR')) 9 LOOP 10 execute immediate 'select count(*) from '||i.table_name||' where instr('||i.column_name||',''testtest'')>0' into num; 11 if num>0 then 12 dbms_output.put_line('表名 '||i.table_name||' '||i.column_name); 13 end if; 14 end loop; 15 end; 16 /
跟你相同的需求
提供的方法有好几种 你看看
还有一点, 如果表里面的行数超过了100行,则跳过这个表。。不对这个表进行搜索。
应该怎么写SQL呢?
我不会ORACLE呃。
---最好分析下表
SQL> create table tb_joe(name varchar2(10))
2 /表已创建。SQL> insert into tb_joe values('testtest');已创建 1 行。SQL> commit
2 /提交完成。SQL> declare
2 v_tbname varchar2(30);
3 v_colname varchar2(30);
4 num number;
5 str varchar2(1000);
6 begin
7 for i in (select a.table_name,a.column_name,num_rows from user_tab_cols a,user_tables b
8 where a.table_name=b.table_name and num_rows<101 and data_type in('VARCHAR','VARCHAR2','CHAR'))
9 LOOP
10 execute immediate 'select count(*) from '||i.table_name||' where instr('||i.column_name||',''testtest'')>0' into num;
11 if num>0 then
12 dbms_output.put_line('表名 '||i.table_name||' '||i.column_name);
13 end if;
14 end loop;
15 end;
16 /
表名 TB_JOE NAME
PL/SQL 过程已成功完成。