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