2016-09-07 2 views
0

데이터 마이 그 레이션 중 일부 테이블 이름을 확인하도록 요청했지만 DBA 권한이 없으며 다른 사용자의 테이블이기 때문에 USER_TABLE보기가 유용하지 않습니다. 그래서 내 생각은 (내가 오라클 SQL 개발자를 사용하고 있습니다)이 같은 AA 쿼리를 만드는 것입니다 :다른 사용자의 테이블 이름 확인

CREATE GLOBAL TEMPORARY TABLE table_exist (NAME VARCHAR(50), EXIST VARCHAR(15)) 
ON COMMIT DELETE ROWS 
/
DECLARE 
v_exist number; 

BEGIN 
SELECT (1) INTO v_exist FROM SCHEMA.TABLE WHERE ROWNUM =1; 
INSERT INTO table_exist (NAME, EXIST) 
VALUES ('TABLE','EXIST'); 

EXCEPTION 
WHEN OTHERS THEN 
INSERT INTO table_exist (NAME, EXIST) 
VALUES ('TABLE','NOT_EXIST'); 
END; 
/
SELECT * FROM table_exist; 
/
DROP TABLE table_exist; 

문제는 테이블이 SQL 여기에 예외 블록을 무시 존재하지 않을 때하는 것은 내가 오류가 있다는 것입니다 :

Informe de error - 
ORA-06550: línea 5, columna 55: 
PL/SQL: ORA-00942: la tabla o vista no existe 
ORA-06550: línea 5, columna 3: 
PL/SQL: SQL Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

no se ha seleccionado ninguna fila 



Table TABLE_EXIST borrado. 

이 오류가 발생하는 이유와 sql이 예외 블록을 읽지 않는 이유를 말해 줄 수 있습니까? (나는 SQL 오라클에서 너무 많은 경험이 없다).

탁신, 당신이 나를 도울 수 있기를 바랍니다.

+0

컴파일 오류이므로 예외에 의해 catch되지 않습니다. 이 방법을 시도하려면 동적 SQL이 필요합니다. '즉시 실행 '을 찾으십시오 – vercelli

+0

잊어 버리십시오. 테이블이 존재하지 않거나 액세스 할 수 없다는 것을 알지 못하기 때문에이 접근법은 어쨌든 작동하지 않습니다. 만약 당신이 사용자와 접근 할 수 있다면'select owner, table_name from all_tables where owner = 'theOtherSchema'; ' – vercelli

+1

vercelli, 많이 작동합니다. – Abianco

답변

1

다양한 카탈로그 뷰에는 DBA_, USER_ 및 ALL_의 세 가지 버전이 있습니다. 당신이 쿼리해야하는 것은 ALL_TABLES입니다 (USER_TABLES은 DBA 권한이 없으므로 자신의 테이블 만 보여주고 DBA_TABLES은 표시하지 않습니다). ALL_TABLES은 다른 사용자를 포함하여 볼 권한이 부여 된 모든 테이블을 보여줍니다.

필요할 수있는 권한이 없으므로 사용자에게 "필요한 테이블"중 일부가 표시되지 않을 수 있습니다. 그것은 당신이 한 일과 당신이받은 힘 사이에 불일치가 있다는 표시 일 것입니다. 그 주위에 "기술적 인"방법이 없을 것입니다, 그것은 비즈니스 이슈가 될 것입니다.

+0

타이 많이! 내가 선택한 소유자, table_name all_tables에서 그것을하고 작동합니다! – Abianco