Effizientes Abgleichen einer großen Anzahl von Zeichenfolgen in der Oracle-Datenbank ohne Berechtigungen zur Tabellenerstellung
In Oracle SQL Developer müssen Sie möglicherweise eine große Anzahl von Zeichenfolgen mit der Datenbank abgleichen, verfügen jedoch nicht über die erforderlichen Berechtigungen zum Erstellen oder Bearbeiten von Tabellen. Diese Situation erfordert alternative Methoden, um den Matching-Prozess effizient durchzuführen.
Sammlungen verwenden
Eine Lösung besteht darin, Sammlungen zu verwenden, mit denen Sie temporäre Container zum Speichern von Datenwerten erstellen können. Oracle bietet zwei Arten von Sammlungen:
Mithilfe von Sammlungen können Sie Ihre IDs in einen Container laden und dann einen Join-Vorgang für die Datenbanktabelle durchführen. Hier ist ein Beispiel für die Verwendung benannter Oracle-Sammlungen:
<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>
Java-Methoden
Alternativ können Sie, wenn Sie über Java-Entwicklungskenntnisse verfügen, Java verwenden, um Ihre IDs in ein Array zu laden und sie als Parameter an die vorbereitete Anweisung zu übergeben, die den Join-Vorgang ausführt:
<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>
Durch die Nutzung von Sammlungen oder Java-Programmierung können Sie eine große Anzahl von Zeichenfolgen effizient Datenbanktabellen zuordnen, ohne dass Berechtigungen zum Erstellen oder Bearbeiten von Tabellen erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie kann man viele Zeichenfolgen effizient mit einer Datenbank abgleichen, ohne über Berechtigungen zur Tabellenerstellung zu verfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!