0

我想搜索名为的列/字段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

4

3 回答 3

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 为数据库中的所有内容显示它们。

于 2012-09-11T18:35:28.867 回答
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);

根据评论中提到的最新答案,我可以使用游标和批量收集(以允许重复值)来查找匹配项:

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
于 2012-09-13T14:51:27.607 回答
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%'
于 2012-09-11T18:38:50.447 回答