집 >데이터 베이스 >MySQL 튜토리얼 >모든 Oracle 테이블의 모든 열에서 특정 값을 효율적으로 찾으려면 어떻게 해야 합니까?
모든 Oracle 테이블의 모든 열에서 특정 값 찾기
이 가이드에서는 대규모 Oracle 데이터베이스에 있는 모든 테이블의 모든 필드에서 특정 값("1/22/2008P09RR8")을 검색하는 방법을 설명합니다. 문제는 알 수 없는 열 이름과 엄청난 양의 데이터에 있습니다.
SELECT * from dba_objects WHERE object_name like '%DTN%'
을 사용한 초기 시도는 실패했습니다. 효과적인 전략은 다음과 같습니다.
열 이름 검색 구체화:
다음을 사용하여 열 이름 검색을 개선하세요.
<code class="language-sql">SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';</code>
이는 잠재적으로 대상 열을 식별할 수 있는 "DTN"이 포함된 열에 중점을 둡니다.
포괄적인 테이블 및 열 검색(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')
절이 추가되었습니다.
검색 최적화:
효율성이 중요합니다. CHAR
과 유사한 데이터 유형(대상 값이 문자열이므로)으로 검색을 제한하면 처리 시간이 크게 단축됩니다.
대안: 테이블당 통합 쿼리:
개별 열 쿼리 대신 테이블당 단일 쿼리를 생성하세요.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!