2017-11-21 2 views
0

Oracle에서 임시 테이블에서 데이터를 가져 오는 위치를 찾으려고합니다. 이 데이터베이스는 CMS에 연결됩니다. CMS에서 보고서가 실행될 때 Oracle은 보고서를 생성 할 임시 테이블을 생성한다는 것을 이해합니다. Oracle SQL 개발자는 테이블 (비어 있음)을 찾고 열 이름을 볼 수 있습니다. 그러나, 데이터를 생성하는 sql을 보면 "column_name number (9,0)"와 같은 열 지정이 있습니다. 종속성을 살펴보면 name과 referenced_name은 같으며 유형은 동의어입니다. 필자는 Oracle SQL Developer 환경을 처음으로 접했습니다.어떤 임시 테이블에서 Oracle에서 데이터를 가져 오는 테이블/열을 찾으십시오.

내 목표는 테이블에서 생성 된 보고서의 데이터를 사용하는 것이지만 데이터의 출처를 알 수 없으며 제 3자가 이러한 테이블을 만든 후 열이 무엇인지 알지 못합니다. 현재 테이블 정의에 액세스 할 수 없습니다.

도움을 주시면 감사하겠습니다. 내가 뭔가를 분명히해야 할 필요가 있다면 알려주세요. 감사합니다

+1

GTT는보기와 다르다. Ad Hoc 기반의 모든 코드로 채울 수 있으므로 데이터 사전에서 뷰의 쿼리에 대해 검색 할 수있는 정적 텍스트와 일치하는 것이 없습니다. 'v $ sql'에서 행운을 빌어서 진술을 찾을 수 있습니다. 부작용으로 써드 파티 코드를 효과적으로 리버스 엔지니어링 할 수 있습니까? –

+0

Hey Alex Poole, 저는 보고서를 생성하는 SQL을 보았습니다. 그러나 필요한 정보는 임시 테이블에서 가져온 것입니다. 임시 테이블에서 정보를 가져 오는 것이 확실하지 않습니다. – Bolaji

+1

그렇습니다. 그러나 temp 테이블을 채우는 것이'v $ sql' 인 채로 있지 않으면 오라클은 GTT의 관점에서 그 테이블의 레코드를 보관하지 않습니다. 보고서가이를 채우는 프로 시저 또는 함수를 호출했을 수 있습니다. 당신은'all_dependencies'를보고 그것에 대한 참조를 찾을 수 있는지 확인할 수 있습니다. –

답변

0

당신은이 두 가지 유형, 거래 별 및 세션 별이 있습니다 당신에게 GTTs

의 목록을 제공

select table_name from all_tables where temporary = 'Y'; 

시도하십시오 수 없습니다.

GTT가 특정 거래일 경우. 즉, ON 커밋 DELETE 행 옵션을 사용하여 만든 경우 트랜잭션이 커밋되면 데이터가 삭제됩니다.

세션마다 다릅니다. 즉, ON 커밋 PRESERVE 행 옵션을 사용하여 만든 경우 데이터는 세션이 닫힐 때까지 보존됩니다. 그때까지 쿼리 할 수 ​​있습니다.

당신이 DBA 액세스가 원래 전역 임시 테이블 이름으로 GTT를 대체

set long 20000 
select dbms_metadata.get_ddl('TABLE', 'GTT') from dual; 

와 세부 사항을 찾을 수있는 경우가 GTT에 데이터를두고있는 이해하려고 노력하는 경우

하지만, 당신이 시도 할 수 있습니다

SELECT * 
    FROM dba_dependencies 
WHERE referenced_name = 'GTT' 
    AND referenced_type = 'TABLE' 

또는

SELECT * 
    FROM dba_source 
WHERE UPPER(text) LIKE '%YOUR_GTT_NAME%'; 
,

또한 GTT를 직접 쿼리하여 데이터를 찾아 소스로 추적 할 수 있습니다.

관련 문제