Faire correspondre efficacement un grand nombre de chaînes dans la base de données Oracle sans autorisations de création de table
Dans Oracle SQL Developer, vous devrez peut-être faire correspondre un grand nombre de chaînes à la base de données, mais vous ne disposez pas des autorisations nécessaires pour créer ou modifier des tables. Cette situation nécessite des méthodes alternatives pour effectuer efficacement le processus de mise en correspondance.
Utiliser les collections
Une solution consiste à utiliser des collections, qui vous permettent de créer des conteneurs temporaires pour stocker les valeurs des données. Oracle propose deux types de collections :
À l'aide de collections, vous pouvez charger vos identifiants dans un conteneur, puis effectuer une opération de jointure sur la table de la base de données. Voici un exemple utilisant des collections nommées 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>
Méthodes Java
Alternativement, si vous avez des compétences en développement Java, vous pouvez utiliser Java pour charger vos identifiants dans un tableau et les transmettre comme paramètres à l'instruction préparée qui effectue l'opération de jointure :
<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>
En tirant parti des collections ou de la programmation Java, vous pouvez faire correspondre efficacement un grand nombre de chaînes aux tables de base de données sans nécessiter d'autorisations de création ou de modification de tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!