Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memadankan Banyak Rentetan Dengan Cekap Terhadap Pangkalan Data Tanpa Keistimewaan Penciptaan Jadual?

Bagaimana untuk Memadankan Banyak Rentetan Dengan Cekap Terhadap Pangkalan Data Tanpa Keistimewaan Penciptaan Jadual?

Patricia Arquette
Patricia Arquetteasal
2025-01-19 14:52:101003semak imbas

How to Efficiently Match Many Strings Against a Database Without Table Creation Privileges?

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:

  1. Tatasusunan Pembolehubah Oracle (VARRAY): Tatasusunan ini menyimpan bilangan elemen tetap bagi satu jenis data.
  2. Koleksi Bernama Oracle (Koleksi): Ini adalah bekas yang tidak tersusun dan boleh diubah saiz yang boleh memuatkan unsur jenis data yang berbeza.

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!

Kenyataan:
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