Heim > Datenbank > MySQL-Tutorial > Wie kann man große String-Listen effizient mit einer Oracle-Datenbank abgleichen, indem man nur Leserechte verwendet?

Wie kann man große String-Listen effizient mit einer Oracle-Datenbank abgleichen, indem man nur Leserechte verwendet?

Barbara Streisand
Freigeben: 2025-01-19 14:36:12
Original
559 Leute haben es durchsucht

How to Efficiently Match Large String Lists with an Oracle Database Using Only Read Privileges?

Effizientes Abgleichen großer String-Listen mithilfe der Oracle-Datenbank

Einleitung:

Beim Umgang mit großen Datensätzen müssen Sie Zeichenfolgen effizient mit den in der Datenbank gespeicherten Daten abgleichen. In diesem Artikel werden Alternativen zu herkömmlichen Ansätzen mit eingeschränkten Datenbankberechtigungen untersucht, die die Erstellung temporärer Tabellen oder die direkte Manipulation von Datenbankstrukturen verhindern.

Problemstellung:

Wie kann man eine große Liste von String-IDs effizient einer Tabelle in einer Oracle-Datenbank zuordnen, wenn man nur Lesezugriff hat? Aufgrund der Größe der Liste ist eine Hardcodierung von IDs nicht möglich.

Option 1: Sammlungen verwenden

Oracle bietet einen Mechanismus namens „Sets“, der als Alternative zu temporären Tabellen verwendet werden kann. Eine Sammlung ist eine Datenstruktur, die eine Reihe von Werten enthalten kann. In diesem Beispiel kann die Sammlung mit Zeichenfolgen-IDs gefüllt werden. Der folgende PL/SQL-Codeausschnitt zeigt, wie Sammlungen verwendet werden:

<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>
Nach dem Login kopieren

Option 2: Java-Arrays verwenden

Wenn Java verfügbar ist, kann dieselbe Methode über Java-Code implementiert werden. Der folgende Codeausschnitt zeigt, wie ein Java-Array verwendet wird, um eine Liste von String-IDs an eine SQL-Abfrage zu ü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( :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>
Nach dem Login kopieren

Beide Optionen bieten eine effiziente Möglichkeit, große Listen von String-IDs mit Daten in einer Oracle-Datenbank abzugleichen, ohne dass temporäre Tabellen oder Änderungen an der Datenbankstruktur erforderlich sind.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage