>데이터 베이스 >MySQL 튜토리얼 >모든 Oracle 테이블의 모든 열에서 특정 값을 효율적으로 찾으려면 어떻게 해야 합니까?

모든 Oracle 테이블의 모든 열에서 특정 값을 효율적으로 찾으려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-22 12:56:10603검색

How Do I Efficiently Find a Specific Value Across All Columns in Every Oracle Table?

모든 Oracle 테이블의 모든 열에서 특정 값 찾기

이 가이드에서는 대규모 Oracle 데이터베이스에 있는 모든 테이블의 모든 필드에서 특정 값("1/22/2008P09RR8")을 검색하는 방법을 설명합니다. 문제는 알 수 없는 열 이름과 엄청난 양의 데이터에 있습니다.

SELECT * from dba_objects WHERE object_name like '%DTN%'을 사용한 초기 시도는 실패했습니다. 효과적인 전략은 다음과 같습니다.

  1. 열 이름 검색 구체화:

    다음을 사용하여 열 이름 검색을 개선하세요.

    <code class="language-sql">SELECT owner, table_name, column_name 
    FROM all_tab_columns 
    WHERE column_name LIKE '%DTN%';</code>

    이는 잠재적으로 대상 열을 식별할 수 있는 "DTN"이 포함된 열에 중점을 둡니다.

  2. 포괄적인 테이블 및 열 검색(PL/SQL 접근 방식):

    이 강력한 방법은 PL/SQL 블록과 동적 SQL을 사용하여 모든 열을 검색합니다.

    <code class="language-sql">SET SERVEROUTPUT ON SIZE 100000
    
    DECLARE
      match_count INTEGER;
    BEGIN
      FOR t IN (SELECT owner, table_name, column_name
                  FROM all_tab_columns
                  WHERE owner NOT IN ('SYS', 'SYSTEM') AND data_type LIKE '%CHAR%') LOOP
    
        EXECUTE IMMEDIATE
          'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
          ' WHERE '||t.column_name||' = :1'
          INTO match_count
          USING '1/22/2008P09RR8';
    
        IF match_count > 0 THEN
          dbms_output.put_line( t.owner || '.' || t.table_name || '.' || t.column_name || ': ' || match_count );
        END IF;
    
      END LOOP;
    
    END;
    /</code>

    참고: 시스템 테이블을 제외하고 효율성을 위해 WHERE owner NOT IN ('SYS', 'SYSTEM') 절이 추가되었습니다.

  3. 검색 최적화:

    효율성이 중요합니다. CHAR과 유사한 데이터 유형(대상 값이 문자열이므로)으로 검색을 제한하면 처리 시간이 크게 단축됩니다.

  4. 대안: 테이블당 통합 쿼리:

    개별 열 쿼리 대신 테이블당 단일 쿼리를 생성하세요.

    <code class="language-sql">SELECT * FROM table1
    WHERE column1 = '1/22/2008P09RR8'
       OR column2 = '1/22/2008P09RR8'
       OR column3 = '1/22/2008P09RR8'
       ...;</code>

    이 접근 방식을 사용하려면 테이블 구조를 미리 알아야 합니다.

이러한 방법은 처음에 알 수 없는 열 이름이 있더라도 Oracle 데이터베이스의 모든 테이블과 열에서 특정 값을 찾는 효율적인 솔루션을 제공합니다. 열 이름에 대한 추가 정보를 반영하려면 LIKE 쿼리의 all_tab_columns 절을 조정해야 합니다.

위 내용은 모든 Oracle 테이블의 모든 열에서 특정 값을 효율적으로 찾으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.