値を渡すことによってテーブルから列名を取得するためにoracleのクエリを使用します。 ほとんどの場合 - そのようなクエリ - select * from table where column = 'value'と書いています。しかし私の場合、私は列名を知らない。oracleで値を渡してテーブルから列名を取得
誰でも私に示唆することができます。事前に おかげで...
値を渡すことによってテーブルから列名を取得するためにoracleのクエリを使用します。 ほとんどの場合 - そのようなクエリ - select * from table where column = 'value'と書いています。しかし私の場合、私は列名を知らない。oracleで値を渡してテーブルから列名を取得
誰でも私に示唆することができます。事前に おかげで...
select table_name from user_Tables where table_name = 'bogus';
私は 'Maria'のような価値があり、私はoracleデータベースから列名とテーブル名を検索したい – MakDeveloper
あなたのDBのすべてのテーブルをチェックするために、動的クエリを作成しようとすることができます。
セットアップ:
create table tab1 (v1 varchar2(100), n1 number, v1b varchar2(100));
create table tab2 (v2 varchar2(100), n2 number, v2b varchar2(100));
create table tab3 (v3 varchar2(100), n3 number, v3b varchar2(100));
insert into tab1 values ('Maria', 1, 'aa');
insert into tab1 values ('xx', 2, 'bb');
insert into tab2 values ('yy', 3, 'Maria');
insert into tab2 values ('zz', 3, 'cc');
insert into tab3 values ('WW', 4, 'DD');
動的問合せの構築:これはあなたがすべてのテーブルをチェックするために実行することができ、クエリを返します
select 'select table_name,
matches from (' || listagg(statement, ' UNION ALL ') within group (order by table_name) || ')
where matches > 0'
from (
select 'select ''' || table_name ||
''' as TABLE_NAME, count(1) as MATCHES from ' || table_name || ' WHERE ' ||
listagg(column_name || ' = ''Maria''', ' OR ') within group (order by column_name) as statement,
table_name
from user_tab_columns col
where data_type = 'VARCHAR2'
group by table_name
)
を。私の例では、これは(フォーマットされていない)クエリを作成します:
SELECT table_name, matches
FROM (SELECT 'TAB1' AS TABLE_NAME, COUNT(1) AS MATCHES
FROM TAB1
WHERE V1 = 'Maria'
OR V1B = 'Maria'
UNION ALL
SELECT 'TAB2' AS TABLE_NAME, COUNT(1) AS MATCHES
FROM TAB2
WHERE V2 = 'Maria'
OR V2B = 'Maria'
UNION ALL
SELECT 'TAB3' AS TABLE_NAME, COUNT(1) AS MATCHES
FROM TAB3
WHERE V3 = 'Maria'
OR V3B = 'Maria')
WHERE matches > 0;
このクエリを実行すると得られます:
TABL MATCHES
---- ----------
TAB1 1
TAB2 1
を、私はこれだけで、ログインのテーブルで検索、USER_TAB_COLUMNS
を使用していることに注意してくださいスキーマ。異なるスキーマで検索する場合は、必要なものとユーザーの権限に応じて、ALL_TAB_COLUMNS
またはDBA_TAB_COLUMNS
を使用できます。何かについてはhereを参照してください。
また、USER_TAB_COLUMNS
はテーブルとビューの列を取得すると考えられます。
SQL> create view vTab1 as select * from tab1;
View created.
SQL> select count(1)
2 from user_tab_columns
3 where table_name = 'VTAB1';
COUNT(1)
----------
3
SQL> select count(1)
2 from user_tab_columns
3 inner join user_tables using(table_name)
4 where table_name = 'VTAB1';
COUNT(1)
----------
0
SQL>
選択:あなたがテーブルに検索を制限したい場合は、ALLまたはDBAのテーブルを使用する場合は、
USER_TAB_COLUMNS
(ALL_TAB_COLUMNS
、DBA_TAB_COLUMNS
)にUSER_TABLES
(ALL_TABLES
、DBA_TABLES
)TABLE_NAME
によって、またはTABLE_NAME
とOWNER
に参加することができます* from user_tables –user_tablesからtable_nameを選択します。ここで、table_name = 'school_master'; –
「Maria」のような値があり、Oracleデータベースから列名と表名を検索したい – MakDeveloper