ホームページ >データベース >mysql チュートリアル >Oracle データベース内のすべてのテーブルと列にわたって特定の値を検索するにはどうすればよいですか?

Oracle データベース内のすべてのテーブルと列にわたって特定の値を検索するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-22 12:52:10317ブラウズ

How to Find a Specific Value Across All Tables and Columns in an Oracle Database?

Oracle データベースの任意のテーブルと列で特定の値を検索

Oracle データベース内の多数のテーブルとフィールドから特定の値を検索する必要があります。データの出所に関する知識は限られていますが、値「1/22/2008P09RR8」は変更されません。

候補列の検索

最初のクエリは、予期される命名パターン「%DTN%」に基づいて候補列を特定しようとしましたが、これは成功しませんでした。代わりに、次のクエリはより正確な検索を提供します:

<code class="language-sql">SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE column_name LIKE '%DTN%';</code>

ただし、「DTN」が単なる推測である場合、このアプローチでは期待した結果が得られない可能性があります。

すべての列を検索

値が実際に列に格納されていると仮定すると、以下を使用して各テーブルのすべての列を体系的に検索できます。

方法 1: 動的 SQL

PL/SQL とダイナミック SQL を使用すると、実行時に SQL クエリを生成して実行できます。次のコード スニペットはこれを実現します:

<code class="language-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;
/</code>

方法 2: スクリプト クエリ

あるいは、各テーブルの列ごとに個別の SQL クエリを生成することもできます。たとえば、「table1」という名前のテーブルの場合、クエリは次のようになります:

<code class="language-sql">SELECT * FROM table1
  WHERE column1 = 'value'
     OR column2 = 'value'
     OR column3 = 'value'
     ...
     ;</code>

これらの方法を使用すると、Oracle データベースの広大な領域で、とらえどころのない値「1/22/2008P09RR8」を注意深く検索できます。

以上がOracle データベース内のすべてのテーブルと列にわたって特定の値を検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。