Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Lỗi ORA-00942 đang tạo ra khi tạo chế độ xem

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ì:

  1. 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ãy all_objects liệt kê mọi thứ bạn có quyền xem, điều này có thể hữu ích.)

  2. 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ế cho xyz ) 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 trong HR nhưng bạn được kết nối bằng SCOTT . Nếu bạn chỉ select * from regions nó sẽ tìm kiếm SCOTT.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 đến regions , cơ sở dữ liệu sẽ tự động chuyển hướng đến hr.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 đến regions được chuyển hướng đến hr.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 đến regions 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xuất kết quả thành các tab khác nhau của Excel trong Toad for Data Analyst?

  2. Trả lại tên ngày ngắn từ một ngày trong Oracle

  3. Làm cách nào để bạn chọn tất cả các cột, cộng với kết quả của câu lệnh CASE trong 11g oracle?

  4. oci_bind_by_name và to_date PHP / OCI / Oracle

  5. Làm cách nào để liệt kê tất cả các bảng trong một lược đồ trong Oracle SQL?