Maison > base de données > tutoriel mysql > Comment puis-je faire correspondre efficacement de grandes listes de chaînes à une table de base de données Oracle ?

Comment puis-je faire correspondre efficacement de grandes listes de chaînes à une table de base de données Oracle ?

Barbara Streisand
Libérer: 2025-01-19 14:41:13
original
447 Les gens l'ont consulté

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

Correspondance efficace de grandes listes de chaînes dans la base de données Oracle

Dans Oracle SQL Developer, la correspondance avec des tables de base de données utilisant de grandes listes de chaînes peut être difficile, surtout si les autorisations sont restreintes. Pour surmonter ce problème, envisagez les techniques suivantes :

Collections

Exploitez les collections pour stocker et manipuler efficacement un grand nombre de valeurs en mémoire. En créant une collection SYS.ODCIVARCHAR2LIST, vous pouvez charger votre liste d'identifiants et effectuer des opérations de jointure à l'aide de requêtes imbriquées.

<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>
Copier après la connexion

Méthode Java

Pour une plus grande flexibilité, vous pouvez utiliser Java pour gérer les collections et l'exécution des requêtes. Cette approche consiste à créer un objet ARRAY et à le transmettre à l'instruction préparée.

<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>
Copier après la connexion

Même avec des autorisations en lecture seule, ces méthodes fournissent des solutions efficaces pour faire correspondre de grandes listes de chaînes à l'aide de bases de données Oracle.

Veuillez noter que la méthode setARRAYAtName dans l'exemple Java utilise un espace réservé ? au lieu du nom de collection codé en dur "votre_collection", ce qui est plus conforme aux meilleures pratiques. De plus, la chaîne de connexion à la base de données, le nom d'utilisateur et le mot de passe doivent être remplacés par vos valeurs réelles.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal