2011-09-16 23 views
8

Lỗi này đang xảy ra khi tôi đang cố gắng để chèn giá trị trên một bảng thuộc về người sử dụng mà tôi đang sử dụng:"hoạt động thao tác dữ liệu không hợp pháp trên quan điểm này" xảy ra trong một bảng dùng

SQL Error: ORA-01732: data manipulation operation not legal on this view 
*Cause:  
*Action: 

Trong tất cả những nơi mọi người nói rằng nó xảy ra khi cố gắng chèn/cập nhật/xóa trên một khung nhìn, nhưng nó chắc chắn là một bảng, và người dùng có các đặc quyền cần thiết.

Vì vậy, có bất kỳ nguyên nhân nào khác xảy ra ngoài việc cố gắng thực hiện hoạt động bất hợp pháp với chế độ xem không?

+1

có bất kỳ trình kích hoạt nào không? – Randy

Trả lời

3

Tôi sẽ kích hoạt truy tìm SQL và thử chèn lại, sau đó xem tệp theo dõi để xác định chính xác câu lệnh SQL nào gây ra lỗi.

Nếu, theo gợi ý của người khác, SQL được thực hiện bởi một trình kích hoạt đối với một số đối tượng khác, bạn sẽ thấy rằng trong dấu vết là SQL đệ quy và sẽ rõ ràng đối tượng nào có liên quan.

Nếu không có SQL đệ quy trong dấu vết, có khả năng bạn không truy cập đối tượng bạn nghĩ, và dấu vết sẽ hiển thị ID đối tượng thực được sử dụng, bạn có thể kiểm tra từ điển dữ liệu .

Nếu nó thực sự chỉ là một bảng, và không có SQL đệ quy liên quan, thì có vẻ như bạn có một trường hợp hỗ trợ Oracle.

+1

Cảm ơn bạn, tôi chưa bao giờ làm điều này. Tôi không biết chính xác tại sao điều này xảy ra, nhưng nó không phải là một cái bàn, như bạn nói, Nhưng một cái nhìn vật chất hóa, nhưng kịch bản để tạo ra nó trông giống như một bảng khai báo bình thường. Trong nhà phát triển sql nó hiển thị nó như một bảng. Vì vậy, cảm ơn bạn rất nhiều. Tôi xin lỗi câu hỏi đã không giải thích chính xác những gì tôi cần, tôi là người ăn xin về oracle và trong sql nói chung. Cảm ơn bạn. –

3

Điều đầu tiên: bạn có thực sự chắc chắn đó là bảng? Từ cách bạn đã đặt câu hỏi, có thể người dùng gặp sự cố này không sở hữu bảng. Trong trường hợp đó, có lẽ có một từ đồng nghĩa hoặc cái gì đó thực sự trỏ vào một khung nhìn.

Điều thứ hai có thể là, nếu có kích hoạt trên bàn và đó là hành động mà nó gây ra sự cố.

+0

Xin chào, tôi chắc chắn đó là một cái bàn. Tôi cố gắng làm điều này với rất nhiều người dùng, bao gồm cả lược đồ, và sau đó tôi đưa ra các đặc quyền cho những người dùng khác cố gắng sử dụng nhưng nó không hoạt động. Nó không phải là một từ đồng nghĩa, nhưng, tôi đang làm việc với Oracle SQL Developer, và công cụ không thể có mã sql của bảng, có thể nó có nghĩa là bảng bị hỏng hoặc bất cứ điều gì như thế này? Cảm ơn bạn –

+1

Cảm ơn bạn, bạn đã đúng, nó không phải là một bảng. Đó là một bảng vật chất hóa, nhưng nó được hiển thị như thế nào giữa các bảng bình thường khác chứ không phải giữa các khung nhìn, quan điểm vật hoá hoặc giữa các từ đồng nghĩa, tôi nghĩ đó là một bảng. Tôi chỉ không hiểu tại sao nó được tổ chức bởi một nhà phát triển sql. Tôi xin lỗi những bất tiện, tôi là người ăn xin trên sql và trong oracle. Cảm ơn nhiều. –

+0

@ThiagoMelo - Tôi gần như bao gồm "hoặc A Xem vật hoá" ở cuối đoạn đầu tiên. Chúc tôi có ngay bây giờ :) – APC

1

thêm một suy nghĩ ...

thử nó với một xác định rõ ràng trên bàn như thế này:

insert into myschema.mytable() values()... 

chỉ trong trường hợp có một số khác tại địa phương ..

4

Một câu trả lời khác : Tôi đã gặp lỗi này khi tôi cố gắng INSERT một bản ghi vào một bảng xem vật hoá.

+1

Mất một lúc để nhận ra rằng cái bàn tôi đã cố gắng chèn vào, thực sự thuộc về một cái nhìn vật chất hóa .. – Sonata

2

Đoán của tôi là bạn có nhiều khả năng nhìn vào một chế độ xem vật chất và không phải là bảng. Tìm kiếm

Select from user_objects 

trong từ điển để xem loại đối tượng.

1

Tôi biết đây là một bài đăng cũ, nhưng FYI, "bảng" thực sự là một cái nhìn vật hoá (mview). Các mview không được cấu hình để cho phép cập nhật và do đó bạn không thể chèn/cập nhật/xóa trên nó.

Bạn có thể có được một danh sách tất cả các quan điểm của bạn cụ thể hóa bằng cách chạy:

select * from user_mviews 
0

trường hợp khác để phát hành báo lỗi này là khi bạn đang cố gắng để cập nhật dữ liệu bằng cột đó không tồn tại:

update house set color = 'blue' where street = 'ABC'; 

street cột không tồn tại trong bảng house

Các vấn đề liên quan