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 に答える