搜索命令以在SQLPLUS for Oracle 10.2中搜索列/字段

时间:2012-09-11 18:30:58

标签: sql oracle

我想搜索名为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

的字段或列

3 个答案:

答案 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%'