Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memadankan Banyak Rentetan Dengan Cekap Terhadap Pangkalan Data Tanpa Keistimewaan Penciptaan Jadual?
Secara cekap memadankan sejumlah besar rentetan dalam pangkalan data Oracle tanpa kebenaran penciptaan jadual
Dalam Oracle SQL Developer, anda mungkin perlu memadankan sejumlah besar rentetan ke pangkalan data, tetapi kekurangan kebenaran yang diperlukan untuk membuat atau mengedit jadual. Keadaan ini memerlukan kaedah alternatif untuk melaksanakan proses pemadanan dengan cekap.
Gunakan koleksi
Satu penyelesaian ialah menggunakan koleksi, yang membolehkan anda mencipta bekas sementara untuk menyimpan nilai data. Oracle menyediakan dua jenis koleksi:
Dengan menggunakan koleksi, anda boleh memuatkan ID anda ke dalam bekas dan kemudian melakukan operasi gabungan pada jadual pangkalan data. Berikut ialah contoh menggunakan koleksi bernama Oracle:
<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>
Kaedah Java
Sebagai alternatif, jika anda mempunyai kemahiran pembangunan Java, anda boleh menggunakan Java untuk memuatkan ID anda ke dalam tatasusunan dan menghantarnya sebagai parameter kepada pernyataan yang disediakan yang melaksanakan operasi gabungan:
<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( ? ) 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>
Dengan memanfaatkan koleksi atau pengaturcaraan Java, anda boleh memadankan sejumlah besar rentetan ke jadual pangkalan data dengan cekap tanpa memerlukan penciptaan jadual atau kebenaran mengedit.
Atas ialah kandungan terperinci Bagaimana untuk Memadankan Banyak Rentetan Dengan Cekap Terhadap Pangkalan Data Tanpa Keistimewaan Penciptaan Jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!