Anonim

Thỉnh thoảng 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 đang gặp phải vấn đề này và muốn biết cách khắc phục 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:

  1. Đặc quyền người dùng không đủ
  2. Bảng hoặc dạng xem không thực sự tồn tại
  3. Bảng hoặc dạng 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 vấn đề.

Khắc phục lỗi ora-00942

Trước hết, một chút từ chối. 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 cách chạy SQL nhưng không đến bất kỳ mức độ chuyên môn nào và chắc chắn không đến mức có thể khắc phục sự cố. Tôi đã phải nhờ một người bạn Oracle DBA của tôi giúp đỡ, vì vậy trong khi tôi viết bài này, các bit thông minh là tất cả của anh ấy.

Danh sách này gồm ba nguyên nhân gây ra lỗi ora-00942 không đầy đủ. Rõ ràng có những nguyên nhân ngẫu nhiên khác của nó nhưng ba nguyên nhân này rõ ràng là phổ biến nhất.

Đặc quyền người dùng không đủ

Một nguyên nhân chính gây ra 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ò CHỌN * TỪ 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ò

CHỌN người được cấp quyền, chủ sở hữu || '.' |

Hai cái này sẽ cho bạn biết nếu người dùng trong câu hỏi 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, chuyển sang 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 làm đ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ó đặc quyền CHỌN. Một lần nữa, hãy kiểm tra mức đặc quyền và thêm CHỌN vào danh sách hoặc yêu cầu Quản trị viên DB thực hiện. Rõ ràng, đặc quyền CHỌN cụ thể phải được cấp cho mỗi lược đồ nếu không bạn vẫn sẽ thấy lỗi ora-00942.

Bảng hoặc dạng 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 không chính xác hoặc nếu bảng không tồn tại. Mặc dù điều này có vẻ là nơi đầu tiên hợp lý để bắt đầu, tôi chắc chắn 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 ở đó 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.

Chủ sở hữu CHỌN, object_name, object_type TỪ all_objects WHERE object_type IN ('TABLE', 'VIEW') AND 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 'YOU_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ó menu 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 sẽ hoàn thành công việc.

Bảng hoặc dạng 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, thì có khả năng đó là lược đồ. Nếu bạn đang quản lý nhiều lược đồ, thật dễ dàng để chạy truy vấn đối với một lược đồ không phải là của bạn. Khi bạn đang bận rộn và chống lại nó, đó là một lỗi đơn giả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 TỪ truy vấn của bạn. Nếu bạn không có cá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 nhận DBA của bạn để làm điều đó cho bạn.

Như đã đề cập ở trên, tôi đã tham khảo ý kiến ​​của một người bạn Oracle DBA của tôi cho tác phẩm này để tất cả tín dụng cho anh ấy 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 ở đây, họ là của riêng tôi. Hãy cho tôi biết trong phần bình luận nếu tôi bỏ lỡ bất cứ điều gì hoặc hiểu sai và tôi sẽ sửa nó.

Nếu bạn biết bất kỳ cách nào khác để khắc phục lỗi ora-00942, hãy cho chúng tôi biết về lỗi bên dưới!

Cách khắc phục lỗi ora-00942