집 >데이터 베이스 >MySQL 튜토리얼 >Oracle 데이터베이스 테이블에 대해 대규모 문자열 목록을 효율적으로 일치시키려면 어떻게 해야 합니까?
Oracle SQL Developer에서는 특히 권한이 제한된 경우 대규모 문자열 목록을 사용하여 데이터베이스 테이블과 일치시키는 것이 어려울 수 있습니다. 이 문제를 극복하려면 다음 기술을 고려하십시오.
컬렉션을 활용하여 메모리에 있는 많은 값을 효율적으로 저장하고 조작합니다. SYS.ODCIVARCHAR2LIST
컬렉션을 생성하면 ID 목록을 로드하고 중첩 쿼리를 사용하여 조인 작업을 수행할 수 있습니다.
<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>
더 큰 유연성을 위해 Java를 사용하여 컬렉션 및 쿼리 실행을 처리할 수 있습니다. 이 접근 방식에는 ARRAY 객체를 생성하고 이를 준비된 문에 전달하는 작업이 포함됩니다.
<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>
읽기 전용 권한이 있더라도 이러한 방법은 Oracle 데이터베이스를 사용하여 대규모 문자열 목록을 일치시키는 효율적인 솔루션을 제공합니다.
Java 예제의 setARRAYAtName
메소드는 하드코딩된 컬렉션 이름 "your_collection" 대신 자리 표시자 ?
를 사용하는데 이는 모범 사례에 더 가깝습니다. 또한 실제 데이터베이스 연결 문자열, 사용자 이름 및 비밀번호를 실제 값으로 바꿔야 합니다.
위 내용은 Oracle 데이터베이스 테이블에 대해 대규모 문자열 목록을 효율적으로 일치시키려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!