ホームページ >データベース >mysql チュートリアル >Oracle データベース内のすべてのテーブルと列にわたって特定の値を検索するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。