oracle中,得到所有的表的列,以及全庫空間查詢

2021-06-28 17:30:54 字數 2686 閱讀 5053

oracle還沒研究明白。這兩天,需要分析winchill的資料庫的表間的關聯關係。

所以,一直用了乙個查詢,類似這樣:

--create or replace

--procedure procedure1hyj as

--set serveroutput on size 100000

declare

match_count integer;

--match_count := 0;

-- type the owner of the tables you are looking at

v_owner varchar2(255) :='pdm8';

-- type the data type you are look at (in capital)

-- varchar2, number, etc.

v_data_type varchar2(255) :='varchar2';

-- type the string you are looking at

v_search_string varchar2(4000) :='wt.workflow.engine.wfprocess';

begin

for t in (select table_name, column_name from all_tab_cols where owner=v_owner and data_type = v_data_type and table_name like 'wt%') loop

execute immediate

'select count(*) from '||t.table_name||' where '||t.column_name||' like :1'

into match_count

using v_search_string;

--dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );

if match_count > 0 then

dbms_output.put_line( '[ee]' || t.table_name ||' '||t.column_name||' '||match_count );

end if;

end loop;

end;

但是,時常會出錯。

經過本人就堅苦的分割槽停電法,終於找到,原來all_tab_cols包括檢視。

而檢視在這個查詢就會出錯。

所以,自己建了乙個檢視,存這些columns,並且把不屬於表的,去除掉。

然後再指向這個檢視,見下:

--create or replace

--procedure procedure1hyj as

--set serveroutput on size 100000

declare

match_count integer;

--match_count := 0;

-- type the owner of the tables you are looking at

v_owner varchar2(255) :='pdm8';

-- type the data type you are look at (in capital)

-- varchar2, number, etc.

--v_data_type varchar2(255) :='varchar2';

v_data_type varchar2(255) :='number';

v_search_string varchar2(4000) :='37137037';

begin

--and table_name like 'f%'owner=v_owner and and (table_name like 'v%' )

for t in (select table_name, column_name from pdm8."haoallcolumnnoview" where data_type = v_data_type ) loop

execute immediate

'select count(*) from '||t.table_name||' where '||t.column_name||' = :1'

into match_count

using v_search_string;

--dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );

if match_count > 0 then

dbms_output.put_line( '[ee]' || t.table_name ||' '||t.column_name||' '||match_count );

end if;

end loop;

end;

這個檢視就不貼了,

就是all_tab_cols與 all_tables的table_name,進行inner join,用owner進行過濾。只選當前表空間的。

這樣這個查詢就ok了。

順便指出,all_tables所在的位置:

【模式】--sys--檢視下面。



Oracle中檢視系統所有的表和所有的字段

獲取表 select table name from user tables 當前使用者擁有的表 select table name from all tables 所有使用者的表 select table name from dba tables 包括系統表 select table name f...

在Oracle中檢視所有的表屬性

在oracle中檢視所有的表 看使用者建立的表 select table name from user tables 當前使用者的表 select table name from all tables 所有使用者的表 select table name from dba tables 包括系統表 s...

oracle 查詢表空間所有表 及表所有的表空間

查詢表空間所有表 select table name from all tables where tablespace name 表空間 表空間名字一定要大寫。查詢表所在的表空間 select from user tables where table name 表名 表名一定要大寫 建立表空間 cr...