Heim >Datenbank >MySQL-Tutorial >Wie kann ich große String-Listen effizient mit einer Oracle-Datenbanktabelle abgleichen?

Wie kann ich große String-Listen effizient mit einer Oracle-Datenbanktabelle abgleichen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-19 14:41:13493Durchsuche

How Can I Efficiently Match Large String Lists Against an Oracle Database Table?

Effizienter Abgleich großer String-Listen in der Oracle-Datenbank

In Oracle SQL Developer kann der Abgleich mit Datenbanktabellen mithilfe großer Zeichenfolgenlisten eine Herausforderung darstellen, insbesondere wenn Berechtigungen eingeschränkt sind. Um dieses Problem zu lösen, sollten Sie die folgenden Techniken in Betracht ziehen:

Sammlungen

Nutzen Sie Sammlungen, um eine große Anzahl von Werten effizient im Speicher zu speichern und zu bearbeiten. Durch das Erstellen einer SYS.ODCIVARCHAR2LIST-Sammlung können Sie Ihre ID-Liste laden und Join-Vorgänge mithilfe verschachtelter Abfragen ausführen.

<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;
/</code>

Java-Methode

Für mehr Flexibilität können Sie Java zum Verwalten von Sammlungen und zur Abfrageausführung verwenden. Bei diesem Ansatz wird ein ARRAY-Objekt erstellt und an die vorbereitete Anweisung übergeben.

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

Selbst mit schreibgeschützten Berechtigungen bieten diese Methoden effiziente Lösungen für den Abgleich großer String-Listen mithilfe von Oracle-Datenbanken.

Bitte beachten Sie, dass die setARRAYAtName-Methode im Java-Beispiel einen Platzhalter ? anstelle des fest codierten Sammlungsnamens „your_collection“ verwendet, was eher den Best Practices entspricht. Darüber hinaus müssen die tatsächliche Datenbankverbindungszeichenfolge, der Benutzername und das Kennwort durch Ihre tatsächlichen Werte ersetzt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich große String-Listen effizient mit einer Oracle-Datenbanktabelle abgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn