Bước đầu tiên để chẩn đoán sự cố khi tạo chế độ xem là thử select
một phần của riêng nó. Trong trường hợp này, bạn sẽ vẫn gặp lỗi ORA-00942, nhưng vấn đề bây giờ chỉ là vấn đề truy vấn và truy cập chứ không liên quan cụ thể đến chế độ xem.
Khi bạn nhận được ORA-00942:bảng hoặc chế độ xem không tồn tại , đó là bởi vì:
-
Tên bảng hoặc chế độ xem mà bạn đã nhập thực sự không tồn tại.
-
Kiểm tra chính tả - có thể có lỗi đánh máy.
-
Bạn có được kết nối với cơ sở dữ liệu nơi nó tồn tại không? Có lẽ bạn đang sử dụng hệ thống thử nghiệm không có hệ thống này.
-
Truy vấn
dba_objects
để xem liệu bảng có tồn tại trong một lược đồ khác hay không. (Nếu bạn không có đặc quyền truy vấn dba_objects, hãyall_objects
liệt kê mọi thứ bạn có quyền xem, điều này có thể hữu ích.)
-
-
Nó thực sự tồn tại, nhưng nó nằm trong một giản đồ khác.
Trong trường hợp đó, có hai vấn đề có thể xảy ra:-
Bạn không có quyền truy vấn nó. Chủ nhân của bảng cần
grant read on xyz
(thay thế tên bảng thực tế choxyz
) cho một trong hai-
bạn
-
public
(nếu bạn muốn mọi người có thể xem dữ liệu, không phải lúc nào cũng được khuyến khích) -
một vai trò mà bạn có (nhưng vai trò không được sử dụng bởi PL / SQL được lưu trữ hoặc lượt xem mặc dù vậy, vì vậy có thể bạn có thể truy vấn một bảng trong một lược đồ khác nhờ vào một vai trò mà bạn có, nhưng vẫn không thể tạo một dạng xem hoặc một thủ tục sử dụng nó.)
-
-
Bạn cần xác định lược đồ. Giả sử bạn muốn truy vấn
REGIONS
bảng trongHR
nhưng bạn được kết nối bằngSCOTT
. Nếu bạn chỉselect * from regions
nó sẽ tìm kiếmSCOTT.REGIONS
, không tồn tại. Để khắc phục điều đó, hãy thực hiện một trong các thao tác sau:-
sử dụng
hr.regions
rõ ràng trong truy vấn của bạn. -
trong lược đồ của bạn,
create or replace synonym regions for hr.regions;
Bây giờ bất cứ khi nào bạn đề cập đếnregions
, cơ sở dữ liệu sẽ tự động chuyển hướng đếnhr.regions
. -
trong bất kỳ lược đồ nào có quyền tạo từ đồng nghĩa công khai:
create or replace public synonym regions for hr.regions;
Bây giờ mọi người kết nối với cơ sở dữ liệu sẽ có bất kỳ tham chiếu nào đếnregions
được chuyển hướng đếnhr.regions
, không phải lúc nào cũng là một ý kiến hay, nhưng dù sao thì đó cũng là một lựa chọn. -
alter session set current_schema = hr;
Bây giờ, lược đồ mặc định để phân giải tên của các đối tượng làHR
và không phải là người bạn đã đăng nhập. Đối với các ứng dụng luôn đăng nhập với tư cách người dùng khác với ứng dụng sở hữu bảng, bạn có thể tạo sau khi kích hoạt đăng nhập vì vậy điều này luôn được thiết lập. Sau đó, họ chỉ có thể tham chiếu đếnregions
vv mà không cần chỉ định bất kỳ lược đồ nào và không có bất kỳ từ đồng nghĩa nào.
-
-