Bởi vì bài đăng này là bài đăng hàng đầu được tìm thấy trên stackoverflow khi tìm kiếm "ORA-00942:bảng hoặc chế độ xem không tồn tại chèn", tôi muốn đề cập đến một nguyên nhân khác có thể gây ra lỗi này (ít nhất là trong Oracle 12c):một bảng sử dụng một chuỗi để đặt giá trị mặc định và người dùng thực hiện truy vấn chèn không có đặc quyền chọn trên chuỗi. Đây là vấn đề của tôi và tôi đã mất nhiều thời gian không cần thiết để tìm ra nó.
Để tái tạo sự cố, hãy thực thi SQL sau dưới dạng user1
:
create sequence seq_customer_id;
create table customer (
c_id number(10) default seq_customer_id.nextval primary key,
name varchar(100) not null,
surname varchar(100) not null
);
grant select, insert, update, delete on customer to user2;
Sau đó, thực hiện câu lệnh chèn này dưới dạng user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
Kết quả sẽ là "ORA-00942:bảng hoặc chế độ xem không tồn tại" mặc dù user2
không có đặc quyền chèn và chọn trên user1.customer
bảng và đặt tiền tố bảng một cách chính xác với tên chủ sở hữu giản đồ. Để tránh sự cố, bạn phải cấp đặc quyền chọn lọc theo trình tự:
grant select on seq_customer_id to user2;