2012-01-24 6 views
8

이것은 꽤 어리석은 일이지만 도움이 필요합니다.올바르게 공개 동의어를 만드는 방법

mydbowner가 소유 한 테이블이 있습니다. 이름은 mydbowner.mytable입니다. 나는 명령을내어 공개 동의어를 만들려고했다.

mytable FOR mydbowner.mytable을 만들기 또는 바꾸기;

나는 이렇게, 나는 내가 할 테이블 쿼리 할 때 : 문제없이 나는이 동의어를 어떻게해야합니까 동의어

의 루핑 체인 :

ORA-01775를.

+0

두 답변이 정확합니다. 나는 일종의 오타를 만들었고 동의어는 아무것도 언급하지 않았다. – Joe

답변

12

저스틴은 올바른 방향이라고 생각합니다. 내가 실제로 생각하는 것은 mydbowner.mytable이 존재하지 않는다는 것입니다. 그것을 발견,이 mbobak 스키마에는 MYTABLE이 없다, 그래서 PUBLIC에서 찾습니다,

SQL> conn mbobak 
Enter password: 
Connected. 
SQL> drop table mytable; 
drop table mytable 
      * 
ERROR at line 1: 
ORA-00942: table or view does not exist 


SQL> create public synonym mytable for mbobak.mytable; 

Synonym created. 

SQL> select * from mytable; 
select * from mytable 
       * 
ERROR at line 1: 
ORA-01775: looping chain of synonyms 

내가 무슨 일이의 것은 오라클이 MYTABLE 확인하려고한다는 것입니다 생각하고 있음을 본다 : 여기

은 예입니다 그것은 mbobak.mytable을 가리 킵니다. 하지만 mbobak.mytable은 존재하지 않으므로 PUBLIC에서 mytable을 찾았고 루프가 있습니다. 당신이 MYTABLE 만드는 경우

그리고 사실

는 오류가 도망 간다 :

SQL> create table mytable as select * from dual; 

Table created. 

SQL> select * from mytable; 

D 
- 
X 

1 row selected. 

SQL> drop table mytable; 

Table dropped. 

SQL> select * from mytable; 
select * from mytable 
       * 
ERROR at line 1: 
ORA-01775: looping chain of synonyms 

예로서 공용 동의어가 mbobak.mytable로 결심하면, 나는 그 정말 완전히 이해가되지 않습니다 실현, 그게 발견되지 않는다면, 그것은 나에게 보인다. ORA-942 "table or view does not exist"라는 에러를 리턴해야하는데, 이것은 나에게 훨씬 더 의미가있다.

하지만이 방법이 효과가있는 것 같습니다.

QED

희망이 있습니다.

6

오류가 발생하면 mydbowner.mytable은 실제로 테이블이 아닙니다. 무엇이

SELECT object_type 
    FROM all_objects 
WHERE owner = 'MYDBOWNER' 
    AND object_name = 'MYTABLE' 

반환합니까?

관련 문제