> 데이터 베이스 > MySQL 튜토리얼 > 읽기 권한만 사용하여 대규모 문자열 목록을 Oracle 데이터베이스와 효율적으로 일치시키는 방법은 무엇입니까?

읽기 권한만 사용하여 대규모 문자열 목록을 Oracle 데이터베이스와 효율적으로 일치시키는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-19 14:36:12
원래의
517명이 탐색했습니다.

How to Efficiently Match Large String Lists with an Oracle Database Using Only Read Privileges?

Oracle 데이터베이스를 사용하여 대규모 문자열 목록을 효율적으로 일치

소개:

대규모 데이터 세트를 처리할 때는 문자열을 데이터베이스에 저장된 데이터와 효율적으로 일치시켜야 합니다. 이 문서에서는 임시 테이블 생성이나 데이터베이스 구조의 직접 조작을 방지하는 제한된 데이터베이스 권한을 사용하는 기존 접근 방식에 대한 대안을 살펴봅니다.

문제 설명:

읽기 액세스 권한만 있는 경우 Oracle 데이터베이스의 테이블에 대규모 문자열 ID 목록을 효율적으로 일치시키는 방법은 무엇입니까? 목록의 크기로 인해 ID를 하드코딩하는 것은 불가능합니다.

옵션 1: 컬렉션 사용

Oracle은 임시 테이블 대신 사용할 수 있는 "세트"라는 메커니즘을 제공합니다. 컬렉션은 일련의 값을 보유할 수 있는 데이터 구조입니다. 이 예에서 컬렉션은 문자열 ID로 채워질 수 있습니다. 다음 PL/SQL 코드 조각은 컬렉션 사용 방법을 보여줍니다.

<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>
로그인 후 복사

옵션 2: Java 배열 사용

Java를 사용할 수 있는 경우 Java 코드를 통해서도 동일한 메소드를 구현할 수 있습니다. 다음 코드 조각은 Java 배열을 사용하여 문자열 ID 목록을 SQL 쿼리에 전달하는 방법을 보여줍니다.

<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( :your_collection ) 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>
로그인 후 복사

두 옵션 모두 임시 테이블이나 데이터베이스 구조 수정 없이 대규모 문자열 ID 목록을 Oracle 데이터베이스의 데이터와 일치시키는 효율적인 방법을 제공합니다.

위 내용은 읽기 권한만 사용하여 대규모 문자열 목록을 Oracle 데이터베이스와 효율적으로 일치시키는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿