我想搜索名为ACC
我有28个用户。我通过这个命令获得了这些信息;列出所有模式:
SELECT username FROM all_users ORDER BY username;
我通过以下命令连接到名为'ABCD'的列表中的用户#13:SHOW USER;
这是一个详细的结构。
user1 > Has many tables > each table has many column/field.
user2 > Has many tables > each table has many column/field.
user3 > Has many tables > each table has many column/field.
等等。
我需要搜索名为ACC
答案 0 :(得分:3)
您需要使用ALL_TAB_COLUMNS或DBA_TAB_COLUMNS,具体取决于您的访问权限。
以下内容将为您提供每个表格,其中包含acc
列,以及“拥有”该表格的用户。
select owner, table_name
from dba_tab_columns
where column_name = 'ACC'
ALL_TAB_COLUMNS将显示您登录的用户可以访问的所有表(及其列)。 DBA_TAB_COLUMNS为数据库中的所有内容显示它们。
答案 1 :(得分:1)
如果我创建一个虚拟表,所以我知道我有一些匹配的数据:
create table t42 (field_acct_1 number, field_acct_2 number);
insert into t42 values (123, 456);
insert into t42 values (234, 567);
insert into t42 values (678, 123);
insert into t42 values (123, 123);
根据评论中提到的recent answer,我可以使用游标和批量收集(以允许重复值)查找匹配项:
set serveroutput on
declare
type t_values is table of number;
l_values t_values;
cursor c1(cp_value number) is
select owner, table_name, column_name,
'select "' || column_name
|| '" from "' || owner ||'"."'|| table_name
|| '" where "' || column_name || '" = ' || cp_value
as query
from all_tab_columns
where column_name like '%ACC%'
and owner != 'SYS'
and data_type = 'NUMBER'
order by owner, table_name, column_name;
begin
for r1 in c1(123) loop
execute immediate r1.query bulk collect into l_values;
for i in 1..l_values.count loop
dbms_output.put_line(r1.owner
||'.'|| r1.table_name
||'.'|| r1.column_name
||':'|| l_values(i));
end loop;
end loop;
end;
/
我已将其限制为查找NUMBER
列以节省时间,并排除SYS
个表格,但您可以添加过滤器以减少其必须执行的工作。除此之外,它几乎是相同的想法;如果不清楚,请参阅前面答案中的嵌入式注释,看看发生了什么。
这给了我(作为owner.table.column:value):
SCOTT.T42.FIELD_ACCT_1:123
SCOTT.T42.FIELD_ACCT_1:123
SCOTT.T42.FIELD_ACCT_2:123
SCOTT.T42.FIELD_ACCT_2:123
答案 2 :(得分:0)
我能够自己解决这个问题。
SELECT
COLUMN_NAME
FROM USER_TAB_COLUMNS
WHERE COLUMN_NAME like '%ACC%';
我还可以通过选择table_name
SELECT
COLUMN_NAME,
TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE COLUMN_NAME like '%ACC%';
从不同的表中选择以下查询,它有更多的结果并显示OWNER
。
SELECT
distinct owner,
COLUMN_NAME,
TABLE_NAME
FROM all_tab_columns
WHERE COLUMN_NAME like '%ACC%'
要搜索表
SELECT
COLUMN_NAME,
TABLE_NAME
FROM USER_TAB_COLUMNS
where TABLE_NAME like '%X%'