2012-01-24 21 views
8

Đây là một từ khá ngớ ngẩn, nhưng tôi cần trợ giúp.Cách tạo từ đồng nghĩa công khai một cách chính xác

Tôi có một bảng do mydbowner sở hữu. Nó được đặt tên mydbowner.mytable. Tôi đã cố gắng tạo một từ đồng nghĩa công khai bằng cách phát lệnh:

TẠO HOẶC THAY THẾ CÔNG CỘNG ĐỒNG TỪ mytable CHO mydbowner.mytable;

Khi tôi làm điều này, và tôi truy vấn bảng tôi nhận được:

ORA-01.775: lặp chuỗi các từ đồng nghĩa

Làm thế nào để làm từ đồng nghĩa này mà không gặp vấn đề.

+0

Hai câu trả lời là chính xác. Tôi đã thực hiện một số loại lỗi đánh máy và từ đồng nghĩa không được đề cập đến. – Joe

Trả lời

12

Tôi nghĩ Justin đang đi đúng hướng. Những gì tôi nghĩ rằng nó thực sự có nghĩa là mydbowner.mytable không tồn tại.

Dưới đây là một ví dụ:

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 

Tôi nghĩ rằng những gì xảy ra là Oracle cố gắng giải quyết mytable, không có mytable trong schema mbobak, vì vậy nó trông cho nó ở nơi công cộng, nó tìm thấy nó, và thấy rằng nó trỏ đến mbobak.mytable. Tuy nhiên, mbobak.mytable không tồn tại, vì vậy, nó tìm kiếm mytable trong PUBLIC, và có vòng lặp.

Và trên thực tế, nếu bạn tạo mytable, lỗi biến mất:

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 

Vâng, tôi nhận ra rằng không thực sự hoàn toàn có ý nghĩa, như, một khi từ đồng nghĩa nào quyết tâm mbobak.mytable, và điều đó không được tìm thấy, có vẻ như với tôi, nó sẽ trả lại một bảng ORA-942 "không tồn tại", điều này có ý nghĩa hơn với tôi.

Nhưng, điều này dường như là cách hoạt động của nó.

QED

Hy vọng điều đó sẽ hữu ích.

6

Lỗi bạn nhận được ngụ ý rằng mydbowner.mytable không thực tế là một bảng.

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

trả lại?

Các vấn đề liên quan