2011-04-06 4 views

답변

4

"ALL_TAB_COLUMNS"은 모든 테이블 컬럼 데이터 유형 등

"USER_TAB_COLUMNS"을 가지고 SYSTABLE, 모두 테이블 컬럼 데이터 유형 등 (어느 오너 현재 사용자이다)이다하는 SYSTABLE이다. (감사 르네)

예제 :

SET SERVEROUTPUT ON SIZE 100000 -- maybe you have a lot of table and columns 

    DECLARE 
     matches INTEGER; 
    BEGIN 
     FOR columns IN (SELECT table_name, column_name FROM user_tab_columns where data_type = 'VARCHAR2') LOOP 

     EXECUTE IMMEDIATE 
      'SELECT COUNT(*) FROM '||t.table_name||' WHERE instr('||t.column_name||' , :1) > 0' 
      INTO matches 
      USING 'What you search'; 

     IF matches > 0 THEN 
      dbms_output.put_line(t.table_name ||' '||t.column_name||' '||matches); 
     END IF; 

     END LOOP; 

    END; 
    /

이 쿼리의 뜻 출력 TABLE_NAME ''COLUMN_NAME ''당신이 STANDART 열 및 테이블 이름이있는 경우, 계산, 당신은 열 IF로 쿼리를 변경할 수 있습니다> 0 그런 다음 루프에서 UNION 쿼리를 작성하고 커서를 반환하거나 테이블을 반환하십시오.

+2

아무도 data_type 'VARCHAR'을 더 이상 사용하지 않는다고 생각합니다. 따라서이 스크립트를 변경하여 문자열 저장에 사용하는 데이터 유형을 포함 할 수 있습니다. VARCHAR2, CHAR, NVARCHAR2, CLOB. 정확한 일치를 원하지 않으면 instr ('what what you search')> 0을 검색 할 수도 있습니다. user_tab_columns를 사용하여 스키마의 테이블로만 검색을 제한하십시오. – Rene

+0

감사합니다. Rene, 대답을 편집합니다. –

+1

"IF matches> 0 THEN"대신 "columns"가되어야한다고 생각하십니까? – anilech

0

다른 스크립트로도이 작업을 수행 할 수 있습니까?

데이터베이스를 텍스트로 디스크에 덤프 한 다음 grep을 사용할 수 있습니다.

관련 문제