Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Mencari Nilai Tertentu Dengan Cekap Merentas Semua Lajur dalam Setiap Jadual Oracle?

Bagaimanakah Saya Mencari Nilai Tertentu Dengan Cekap Merentas Semua Lajur dalam Setiap Jadual Oracle?

Barbara Streisand
Lepaskan: 2025-01-22 12:56:10
asal
568 orang telah melayarinya

How Do I Efficiently Find a Specific Value Across All Columns in Every Oracle Table?

Mencari Nilai Khusus dalam Setiap Lajur Setiap Jadual Oracle

Panduan ini menerangkan cara mencari nilai tertentu ("1/22/2008P09RR8") dalam setiap medan setiap jadual dalam pangkalan data Oracle yang besar. Cabarannya terletak pada nama lajur yang tidak diketahui dan jumlah data yang banyak.

Percubaan awal menggunakan SELECT * from dba_objects WHERE object_name like '%DTN%' terbukti tidak berjaya. Berikut adalah strategi yang berkesan:

  1. Memperhalusi Carian Nama Lajur:

    Tingkatkan carian nama lajur dengan:

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

    Ini memfokuskan pada lajur yang mengandungi "DTN," yang berpotensi mengenal pasti lajur sasaran.

  2. Carian Jadual dan Lajur Komprehensif (Pendekatan PL/SQL):

    Kaedah teguh ini menggunakan blok PL/SQL dan SQL dinamik untuk mencari setiap lajur:

    <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 NOT IN ('SYS', 'SYSTEM') 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.owner || '.' || t.table_name || '.' || t.column_name || ': ' || match_count );
        END IF;
    
      END LOOP;
    
    END;
    /</code>
    Salin selepas log masuk

    Nota: Klausa WHERE owner NOT IN ('SYS', 'SYSTEM') ditambahkan untuk kecekapan, tidak termasuk jadual sistem.

  3. Mengoptimumkan Carian:

    Kecekapan adalah penting. Mengehadkan carian kepada jenis data seperti CHAR (kerana nilai sasaran ialah rentetan) mengurangkan masa pemprosesan dengan ketara.

  4. Alternatif: Pertanyaan Disatukan setiap Jadual:

    Daripada pertanyaan lajur individu, buat satu pertanyaan bagi setiap jadual:

    <code class="language-sql">SELECT * FROM table1
    WHERE column1 = '1/22/2008P09RR8'
       OR column2 = '1/22/2008P09RR8'
       OR column3 = '1/22/2008P09RR8'
       ...;</code>
    Salin selepas log masuk

    Pendekatan ini memerlukan mengetahui struktur jadual terlebih dahulu.

Kaedah ini menyediakan penyelesaian yang cekap untuk mencari nilai tertentu merentas semua jadual dan lajur dalam pangkalan data Oracle, walaupun dengan nama lajur yang pada mulanya tidak diketahui. Ingat untuk melaraskan klausa LIKE dalam pertanyaan all_tab_columns untuk menggambarkan sebarang pengetahuan tambahan tentang nama lajur.

Atas ialah kandungan terperinci Bagaimanakah Saya Mencari Nilai Tertentu Dengan Cekap Merentas Semua Lajur dalam Setiap Jadual Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan