Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memadankan Senarai Rentetan Besar dengan Pangkalan Data Oracle Dengan Cekap Hanya Menggunakan Keistimewaan Baca?
Pengenalan:
Apabila berurusan dengan set data yang besar, anda perlu memadankan rentetan dengan cekap dengan data yang disimpan dalam pangkalan data. Artikel ini meneroka alternatif kepada pendekatan tradisional dengan kebenaran pangkalan data terhad yang menghalang penciptaan jadual sementara atau manipulasi langsung struktur pangkalan data.
Pernyataan Masalah:
Bagaimana untuk memadankan senarai besar ID rentetan dengan cekap kepada jadual dalam pangkalan data Oracle apabila anda hanya mempunyai akses baca? Oleh kerana saiz senarai, ID pengekodan keras tidak boleh dilaksanakan.
Pilihan 1: Gunakan koleksi
Oracle menyediakan mekanisme yang dipanggil "set" yang boleh digunakan sebagai alternatif kepada jadual sementara. Koleksi ialah struktur data yang boleh menyimpan satu siri nilai. Dalam contoh ini, koleksi boleh diisi dengan ID rentetan. Coretan kod PL/SQL berikut menunjukkan cara menggunakan koleksi:
<code class="language-sql">VARIABLE cursor REFCURSOR; DECLARE your_collection SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST(); BEGIN your_collection.EXTEND( 10000 ); FOR i IN 1 .. 10000 LOOP -- 填充集合。 your_collection(i) := DBMS_RANDOM.STRING( 'x', 20 ); END LOOP; OPEN :cursor FOR SELECT t.* FROM your_table t INNER JOIN TABLE( your_collection ) c ON t.id = c.COLUMN_VALUE; END; / PRINT cursor;</code>
Pilihan 2: Gunakan tatasusunan Java
Jika Java tersedia, kaedah yang sama boleh dilaksanakan melalui kod Java. Coretan kod berikut menunjukkan cara menggunakan tatasusunan Java untuk menghantar senarai ID rentetan kepada pertanyaan SQL:
<code class="language-java">import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import oracle.jdbc.OraclePreparedStatement; import oracle.sql.ARRAY; import oracle.sql.ArrayDescriptor; public class TestDatabase2 { public static void main(String args[]){ try{ Class.forName("oracle.jdbc.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","username","password"); String[] ids = { "1", "2", "3" }; ArrayDescriptor des = ArrayDescriptor.createDescriptor("SYS.ODCIVARCHAR2LIST", con); PreparedStatement st = con.prepareStatement("SELECT t.* FROM your_table t INNER JOIN TABLE( :your_collection ) c ON t.id = c.COLUMN_VALUE"); // 将数组传递给过程 - ((OraclePreparedStatement) st).setARRAYAtName( "your_collection", new ARRAY( des, con, ids ) ); ResultSet cursor = st.executeQuery(); while ( cursor.next() ) { int id = cursor.getInt(1); double column1 = cursor.getDouble(2); double column2 = cursor.getDouble(3); System.out.println( String.format( "Id: %5d", id ) ); System.out.println( String.format( " Column1: %s", column1 ) ); System.out.println( String.format( " Column2: %s", column2 ) ); } } catch(ClassNotFoundException | SQLException e) { System.out.println(e); } } }</code>
Kedua-dua pilihan menyediakan cara yang cekap untuk memadankan senarai besar ID rentetan dengan data dalam pangkalan data Oracle tanpa memerlukan jadual sementara atau pengubahsuaian pada struktur pangkalan data.
Atas ialah kandungan terperinci Bagaimana untuk Memadankan Senarai Rentetan Besar dengan Pangkalan Data Oracle Dengan Cekap Hanya Menggunakan Keistimewaan Baca?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!