[解決済み] 全テーブルの全フィールドを特定の値で検索する (Oracle)
質問
Oracle では、すべてのテーブルのすべてのフィールドで、特定の値を検索することは可能ですか?
何百ものテーブルがあり、いくつかのテーブルでは何千もの行があるので、クエリに非常に長い時間がかかることは承知しています。しかし、私が知っているのは、私がクエリを実行したいフィールドの値が
1/22/2008P09RR8
.
<
私は以下のこのステートメントを使って、私が考える名前に基づいて適切なカラムを見つけようとしましたが、結果は何も返されませんでした。
SELECT * from dba_objects
WHERE object_name like '%DTN%'
このデータベースに関するドキュメントはまったくなく、このフィールドがどこから引き出されているのか見当もつきません。
何か考えはありますか?
どのように解決するのですか?
引用元
以下のようなステートメントを使ってみました。 を使用して、適切なカラムを検索してみました。 という名前にしようとしましたが は結果を返しませんでした。
SELECT * from dba_objects WHERE object_name like '%DTN%'
カラムはオブジェクトではありません。 もし、カラム名が「%DTN%」のようになることを期待しているということであれば、欲しいクエリーは以下のようになります。
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
しかし、'DTN' 文字列があなたの側での単なる推測である場合、それはおそらく役に立ちません。
ところで、'1/22/2008P09RR8' が 1 つの列から直接選択された値であることは、どの程度確実なのでしょうか。 どこから来たのかまったくわからない場合、複数の列を連結したものであったり、関数の結果であったり、ネストされたテーブル オブジェクトにある値であったりする可能性があります。 だから、その値についてすべてのカラムをチェックしようとすると、無駄足になるかもしれない。 この値を表示しているクライアント アプリケーションから始めて、その値を取得するためにどのようなクエリを使用しているかを把握することはできないのでしょうか?
とにかく、diciu の回答は、値を得るためにすべてのテーブルのすべての列をチェックする SQL クエリを生成する 1 つの方法を示しています。 また、PL/SQL ブロックと動的 SQL を使用して、1 つの SQL セッションで完全に同様のことを行うこともできます。 以下はそのために急いで書いたコードです。
SET SERVEROUTPUT ON SIZE 100000
DECLARE
match_count INTEGER;
BEGIN
FOR t IN (SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE owner <> 'SYS' and data_type LIKE '%CHAR%') LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
' WHERE '||t.column_name||' = :1'
INTO match_count
USING '1/22/2008P09RR8';
IF match_count > 0 THEN
dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
END IF;
END LOOP;
END;
/
もっと効率的にする方法もありますよ。
この場合、求めている値を考えると、NUMBER型やDATE型の列を明らかに排除することができ、クエリの数を減らすことができます。 もしかしたら、型が「%CHAR%」のようなカラムに限定することもできるかもしれません。
列ごとに1つのクエリを作成する代わりに、このようにテーブルごとに1つのクエリを作成することができます。
SELECT * FROM table1
WHERE column1 = 'value'
OR column2 = 'value'
OR column3 = 'value'
...
;
関連
-
[解決済み] ストアドプロシージャ 'dbo.aspnet_CheckSchemaVersion' が見つかりませんでした。
-
[解決済み] LINQでInclude()は何をするのですか?
-
[解決済み] Oracleの全テーブルのリストを取得しますか?
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] TSQLを使用してデータベース内のすべてのテーブルのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み] Android Studioでプロジェクト全体の文字列の出現箇所をすべて検索する
-
[解決済み] Postgres の全テーブルの行数を求めるには?
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
executeQuery()ソリューションでデータ操作文を発行できない。
-
MHAクラスタエラーサマリーの構築
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] SQLiteデータベースで、一度に複数行を挿入することは可能ですか?
-
[解決済み] SQL Server 2008を使用してIDENTITY_INSERTをオン/オフする方法は?
-
[解決済み] 項目xにアクセスできるように文字列を分割するにはどうすればよいですか?