Maison > base de données > tutoriel mysql > Comment faire correspondre efficacement plusieurs chaînes à une base de données sans privilèges de création de table ?

Comment faire correspondre efficacement plusieurs chaînes à une base de données sans privilèges de création de table ?

Patricia Arquette
Libérer: 2025-01-19 14:52:10
original
955 Les gens l'ont consulté

How to Efficiently Match Many Strings Against a Database Without Table Creation Privileges?

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 :

  1. Tableaux de variables Oracle (VARRAY) : ces tableaux stockent un nombre fixe d'éléments d'un seul type de données.
  2. Collections nommées Oracle (Collections) : ce sont des conteneurs non ordonnés et redimensionnables qui peuvent contenir des éléments de différents types de données.

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

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

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!

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