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:
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>
Ini memfokuskan pada lajur yang mengandungi "DTN," yang berpotensi mengenal pasti lajur sasaran.
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>
Nota: Klausa WHERE owner NOT IN ('SYS', 'SYSTEM')
ditambahkan untuk kecekapan, tidak termasuk jadual sistem.
Mengoptimumkan Carian:
Kecekapan adalah penting. Mengehadkan carian kepada jenis data seperti CHAR
(kerana nilai sasaran ialah rentetan) mengurangkan masa pemprosesan dengan ketara.
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>
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!