Đôi khi bạn thấy lỗi ora-00942 khi chạy câu lệnh SQL. Nó có một vài nguyên nhân và như thường lệ, cú pháp lỗi không phải là mô tả nhất. Nếu bạn muốn chống lại điều này và muốn biết cách sửa lỗi ora-00942, hãy đọc tiếp.
Theo tôi biết, có ba nguyên nhân chính gây ra lỗi ora-00942:
- Không đủ đặc quyền người dùng
- Bảng hoặc chế độ xem không thực sự tồn tại
- Bảng hoặc chế độ xem nằm trong một lược đồ khác
Tôi sẽ chỉ cho bạn cách giải quyết từng cái một.
Khắc phục lỗi ora-00942
Trước hết, một chút khước từ trách nhiệm. Tôi không phải là DBA, tôi là quản trị viên Windows và công nghệ phần cứng máy tính để bàn và máy chủ. Tôi biết làm thế nào để chạy SQL nhưng không đến bất kỳ mức độ chuyên môn và chắc chắn không đến mức có thể khắc phục sự cố. Tôi phải hỏi một người bạn DBA của tôi để được giúp đỡ, vì vậy trong khi tôi viết đoạn này, các bit thông minh là tất cả của anh ấy.
Danh sách ba nguyên nhân của lỗi ora-00942 này không đầy đủ. Rõ ràng là có những nguyên nhân ngẫu nhiên khác, nhưng ba loại này rõ ràng là phổ biến nhất.
Không đủ đặc quyền người dùng
Một nguyên nhân chính của lỗi ora-00942 là người dùng không có đủ đặc quyền để truy cập vào bảng được đề cập. Bạn có thể kiểm tra điều này bằng cách chạy hai truy vấn.
- liệt kê các đặc quyền hệ thống cho người dùng hoặc vai trò SELECT * FROM dba_sys_privs WHERE người được cấp IN (& user_role, 'PUBLIC');
- liệt kê các đặc quyền đối tượng cho người dùng hoặc vai trò
SELECT grantee, owner || '.' || table_name object, privilege, grantable FROM dba_tab_privs WHERE được cấp quyền IN (& user_role) ORDER BY người được cấp quyền, chủ sở hữu || '.' || table_name, privilege;
Cả hai sẽ cho bạn biết nếu người dùng được đề cập có các đặc quyền chính xác để chạy lệnh. Nếu người dùng có các đặc quyền chính xác, hãy chuyển sang phần tiếp theo. Nếu người dùng không có các đặc quyền chính xác, hãy cấp cho họ hoặc yêu cầu Quản trị viên DB của bạn thực hiện điều đó.
Lỗi ora-00942 cũng có thể xảy ra nếu người dùng lược đồ bạn đang sử dụng có đặc quyền INSERT nhưng không có quyền SELECT. Một lần nữa, kiểm tra mức độ đặc quyền và thêm SELECT vào danh sách hoặc yêu cầu một quản trị viên DB để làm điều đó. Rõ ràng, đặc quyền SELECT cụ thể phải được cấp cho mỗi lược đồ nếu không bạn sẽ vẫn thấy lỗi ora-00942.
Bảng hoặc chế độ xem không thực sự tồn tại
Nguyên nhân gây ra lỗi ora-00942 có thể do cú pháp truy vấn sai hoặc nếu bảng không tồn tại. Mặc dù điều này dường như là nơi đầu tiên hợp lý để bắt đầu, tôi tin chắc chắn rằng đặc quyền người dùng là nguyên nhân số một của lỗi. Bảng không có ở đó hoặc cú pháp bảng sai được sử dụng là thứ hai.
Để kiểm tra xem bảng có tồn tại hay không, trước tiên hãy kiểm tra cú pháp của truy vấn. Nếu cú pháp đúng, hãy chạy truy vấn này.
SELECT chủ sở hữu, object_name, object_type FROM all_objects WHERE object_type IN ('TABLE', 'VIEW') VÀ object_name = 'YOUR_TABLE_NAME';
Trên dòng cuối cùng đó, hãy chèn tên bảng thực tế nơi bạn thấy 'YOUR_TABLE_NAME'. Điều này sẽ cho bạn biết chắc chắn liệu bảng bạn đang cố truy vấn có tồn tại hay không. Nếu nó trả về không có bảng, bảng bạn đang truy vấn không tồn tại trong lược đồ hoặc cơ sở dữ liệu.
Nếu hệ thống bạn đang sử dụng có một trình đơn Bảng, bạn có thể kiểm tra bảng theo cách thủ công nếu bạn thích nhưng truy vấn trên đã hoàn thành công việc.
Bảng hoặc chế độ xem nằm trong một lược đồ khác
Nếu người dùng có các đặc quyền và bảng tồn tại và bạn vẫn thấy lỗi ora-00942, nó có khả năng xuống lược đồ. Nếu bạn đang quản lý nhiều lược đồ, bạn có thể dễ dàng chạy truy vấn dựa trên lược đồ không phải của bạn. Khi bạn bận rộn và chống lại nó, nó là một lỗi đơn giản để thực hiện.
Kiểm tra lược đồ theo cách thủ công nếu bạn có thể hoặc thêm tên lược đồ trong dòng FROM của truy vấn của bạn. Nếu bạn không có đặc quyền chính xác cho lược đồ mới, bạn sẽ thấy lỗi ora-00942 một lần nữa. Quay trở lại sửa chữa đặc quyền người dùng đầu tiên và kiểm tra lược đồ tương ứng hoặc lấy DBA của bạn để làm điều đó cho bạn.
Như đã đề cập ở trên, tôi đã tham khảo ý kiến một người bạn DBA của tôi về phần này vì vậy tất cả các khoản tín dụng cho anh ta cho công việc khó khăn. Nếu bạn tìm thấy bất kỳ lỗi hoặc thiếu sót nào ở đây, chúng chỉ là của tôi thôi. Hãy cho tôi biết trong phần ý kiến nếu tôi bỏ lỡ bất cứ điều gì hoặc đã nhận nó sai và tôi sẽ sửa nó.
Nếu bạn biết cách nào khác để khắc phục lỗi ora-00942, hãy cho chúng tôi biết về nó dưới đây!