需用PLSQL,已知一个数据,反查这个数据所在的所有表,这个遍历怎么写,高手帮忙
解决方案 »
- 请教Oracle依时间顺序分组 并行转列
- 表中有两列,其中一列是记录创建时间,怎样查询创建时间的分钟以上的时间是一样的记录
- !!!高手求救:如何写根据时间触发的触发器。
- oracle 10g for winx86 64
- oemctl start oms time out!!怎么办
- 急,求助,解决马上结贴,100分,为什么我的job_queue_process进程数老是没法修改?
- 我用oracle develop2000开发数据库程序,现需要得到最近两月的起始和终止日期,如何求的?
- oracle乱码问题--100分
- oracle双机热备怎么做?
- 紧急求救!pb8突然联不上服务器数据库!!
- 安装]windows平台下Oracle RAC集群系统安装过程
- 关于外连接不是很懂
DECLARE
L_V VARCHAR2(100) := 'x';
L_I INT;
CURSOR C IS
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE '%TEST%';
BEGIN
FOR I IN C LOOP
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || I.TABLE_NAME ||
' where 1>0' INTO L_I;
/*
--需要改成你查询表的列
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || I.TABLE_NAME ||
' where col=''' || L_v || '''' INTO L_I;
*/
IF L_I > 0 THEN
DBMS_OUTPUT.PUT_LINE(I.TABLE_NAME || ' 有查询的数据!');
ELSE
DBMS_OUTPUT.PUT_LINE(I.TABLE_NAME || ' 没有有查询的数据!');
END IF;
END LOOP;
END;
/
输出:
TEST3 有查询的数据!
TESTX 没有有查询的数据!
TEST_DISTICT 有查询的数据!
2 v_sql varchar2(2000);
3 v_no number;
4 begin
5 for c in (select table_name, column_id, data_type, column_name
6 from user_tab_columns a
7 where exists (select 1
8 from user_all_tables b
9 where a.TABLE_NAME = b.table_name)
10 order by table_name, column_id) loop
11 v_sql := 'select count(1) from ' || c.table_name || ' where ' ||
12 c.column_name || ' like ''%&text%'' ';
13 /* dbms_output.put_line('SQL:=' || v_sql); */
14 execute immediate v_sql
15 into v_no;
16 if (v_no > 0) then
17 dbms_output.put_line('TableName=' || c.table_name ||
18 lpad('ColumnName=', 20) || c.column_name ||
19 lpad('Number=', 20) || v_no);
20 end if;
21 end loop;
22 end;
23 /
输入 text 的值: L
原值 12: c.column_name || ' like ''%&text%'' ';
新值 12: c.column_name || ' like ''%L%'' ';
TableName=DEMO ColumnName=ENAME Number=4
TableName=DEMO ColumnName=JOB Number=10
TableName=T ColumnName=OWNER Number=20218
TableName=T ColumnName=OBJECT_NAME Number=8746
TableName=T ColumnName=OBJECT_TYPE Number=16529
TableName=T ColumnName=STATUS Number=40698
TableName=T_LESSION ColumnName=LESSION_ID Number=5
TableName=T_SCORE ColumnName=LESSION_ID Number=6PL/SQL 过程已成功完成。SQL>
6 from user_tab_columns a
7 where exists (select 1
8 from user_all_tables b
9 where a.TABLE_NAME = b.table_name)
10 order by table_name, column_id)
这个没看懂
10g的时候oracle增加一个类似回收站的功能(可以把drop掉的表flashback回来),user_tab_columns视图里的字段和表包含了回收站中的表,简单的说,就是我现在创建新用户user,user创建了一个表A,然后user删除了表A,此时,user_all_tables视图查询是没有记录的,但是查询user_tab_columns的话,就可以看到被删除的表A的字段信息。增加exists条件是仅查询当前用户下当前的表,并不查询回收站中的表。
附:回收站就和windows的回收站的功能类似,也是可以清空的