想要在oracle的某个用户下检索所有的表的所有的字段中是否有关键字abc,如果有,那么判断这个表中是否有ddd字段,如果有显示关键字abc所在行的ddd字段的内容。
解决方案 »
- 为什么更改不了连接用户名(SYS更改不了到SYSTEM)?
- oracle与sql server的数据同步的效率问题。
- 请教高手:这样的SQL语句如何写--在线等
- ORA-00604: 递归 SQL 级别 1 出现错误--> 错误!
- 关于Oracle 里面的sql 语句问题,有谁能帮我一下??
- asp读取oracle表后,为什么rs.recordcount 为-1,而不是记录集的条数。
- 怎么将sqlserver中的表格转换到oracle9中
- 我们公司要开发一个大型的oracle应用,高手请进,如能解决,马上给分。
- 请教建库问题
- 有个问题没搞明白(关于DBLINK)
- 关于在oracle中使用游标插入值
- 如何通过 dbms_job 生成 “每周 2,3,4,5,6 凌晨 1~4点,每半小时执行 SP:test_SP ”的任务 ?
(
TABLE_NAME VARCHAR2(200),
DDD VARCHAR2(200)
);create or replace procedure p_test_01
is
-- Local variables here
cursor cur_table(pi_colname in varchar2) is
select distinct t.object_name
from user_objects t ,
user_tab_cols c
where t.object_type='TABLE'
and c.table_name=t.object_name
and c.column_name=upper(pi_colname)
;
vc_colname varchar2(200);
vr_table cur_table%rowtype;
cursor cur_col(pi_tablename in varchar2) is
select t.COLUMN_NAME
from user_tab_columns t
where t.TABLE_NAME=pi_tablename
and t.DATA_TYPE like '%CHAR%';
vr_col cur_col%rowtype ;
vc_sql varchar2(4000);
vc_qry varchar2(100);
vc_out varchar2(200);
vn_count number;
begin
-- Test statements here
vc_colname :='DDD';
vc_qry:='AAA';
open cur_table(vc_colname);
loop
fetch cur_table into vr_table;
exit when cur_table%notfound;
vn_count:=0;
vc_sql:='insert into t_test select '''||vr_table.object_name||''', '||vc_colname||' from '||vr_table.object_name ||' where 1=0 ';
open cur_col(vr_table.object_name);
loop
fetch cur_col into vr_col;
exit when cur_col%notfound;
vc_sql:=vc_sql||' or '||vr_col.column_name||'='''||vc_qry||'''';
vn_count:=vn_count+1;
end loop;
if vn_count>0 then
execute immediate vc_sql ;
end if;
close cur_col;
end loop;
close cur_table;
commit;
end;
应该先判断列名再取数据比较:
DECLARE
L_TN VARCHAR2(30);
L_C SYS_REFCURSOR;
L_R VARCHAR2(4000);
BEGIN
FOR I IN (SELECT TABLE_NAME
FROM DBA_TAB_COLS S
WHERE S.COLUMN_NAME = 'DDD'
AND S.OWNER = USER) LOOP
DBMS_OUTPUT.PUT_LINE(I.TABLE_NAME || ' have DDD column!');
OPEN L_C FOR 'select ddd from "' || I.TABLE_NAME || '" where ddd like ''%abc%''';
LOOP
FETCH L_C
INTO L_R;
EXIT WHEN L_C%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(I.TABLE_NAME||' ddd is:'||L_R);
END LOOP;
CLOSE L_C;
DBMS_OUTPUT.PUT_LINE('***************');
END LOOP;
END;
/--输出:
TX1 have DDD column!
***************
TX2 have DDD column!
TX2 ddd is:sssabcsf
TX2 ddd is:xabc
***************
TX3 have DDD column!
TX3 ddd is:sssabcsf3
TX3 ddd is:xabc3
***************