2011-09-16 5 views
8

Este error sucede cuando estoy tratando de insertar valores en una tabla pertenecen al usuario, que estoy usando:"operación de manipulación de datos no es legal en este punto de vista" ocurre en una tabla de usuario

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

En todos los lugares, la gente dice que ocurre al intentar insertar/actualizar/eliminar en una vista, pero sin duda es una tabla y el usuario tiene los privilegios necesarios.

Entonces, ¿hay alguna otra causa para que esto ocurra más allá de tratar de hacer una operación ilegal con una vista?

+1

¿hay factores desencadenantes? – Randy

Respuesta

3

Activaría el seguimiento de SQL y probaré la inserción nuevamente, luego veré el archivo de rastreo para determinar exactamente qué declaración SQL está causando el error.

Si, como sugirieron otros, es SQL ejecutado por un disparador contra algún otro objeto, verá que en el rastreo como SQL recursivo y quedará claro qué objeto está involucrado.

Si no hay un SQL recursivo en la traza, es probable que no esté accediendo al objeto que cree que es, y la traza debe mostrar el ID de objeto real que se está utilizando, que puede consultar con el diccionario de datos .

Si realmente es solo una tabla, y no hay SQL recursivo involucrado, entonces parece que tiene un caso para el soporte de Oracle.

+1

Gracias, nunca lo hice. No sé exactamente por qué ocurrió esto, pero no es una tabla, como dices, sino una vista materializada, pero la secuencia de comandos para crearla parece una declaración de tabla normal. En el desarrollador sql, se muestra como una tabla. Así que muchas gracias. Lamento que la pregunta no haya explicado exactamente lo que necesito, soy principiante en Oracle y en sql en general. Gracias. –

3

Lo primero: ¿eres realmente seguro que es una mesa? Por la forma en que ha formulado la pregunta, es posible que el usuario que experimenta este problema no sea el propietario de la tabla. En cuyo caso, tal vez haya un sinónimo o algo que realmente apunte a una vista.

Lo segundo que podría ser, es si hay un disparador sobre la mesa y es la acción que dispara lo que causa el problema.

+0

Hola, sí, estoy realmente seguro de que es una mesa. Intento hacer esto con muchos usuarios, incluido el esquema, y ​​después de esto doy privilegios para los otros usuarios que intentan utilizar pero no funciona. No es un sinónimo, pero, estoy trabajando con Oracle SQL Developer, y la herramienta no puede obtener el código sql de la tabla, ¿puede significar que la tabla está corrupta o algo como esto? Gracias –

+1

Gracias, tenías razón, no era una mesa. Era una tabla materializada, pero cómo se ha demostrado entre las otras tablas normales y no entre las vistas, las vistas materializadas o entre los sinónimos, creo que eran una tabla. Simplemente no entiendo por qué está organizado como una mesa por el desarrollador sql. Lamento el inconveniente, soy principiante en SQL y en Oracle. Muchas gracias. –

+0

@ThiagoMelo: casi incluyo "o una vista materializada" al final del primer párrafo. Ojalá tuviera ahora :) – APC

1

un pensamiento más ...

intentarlo con una identificación explícita en la mesa de la siguiente manera:

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

por si acaso hay otro nivel local ..

4

una respuesta alternativa : Encontré este error cuando intenté INSERTAR un registro en una tabla de visualización materializada.

+1

Me tomó un tiempo darme cuenta de que la mesa en la que traté de insertar, en realidad pertenecía a una vista materializada. – Sonata

2

Supongo que lo más probable es que estés mirando una vista materializada y no una tabla. Búsqueda de

Select from user_objects 

en el diccionario que ver el tipo de objeto.

1

Sé que esta es una publicación súper antigua, pero para su información, la "tabla" es en realidad una vista materializada (mview). El mview no está configurado para permitir actualizaciones y, por lo tanto, no puede insertar/actualizar/eliminar en él.

Usted puede obtener una lista de todas sus vistas materializadas mediante la ejecución:

select * from user_mviews 
0

Otro caso para emitir este error es cuando usted está tratando de actualizar datos mediante una columna que no existe:

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

street columna no existe en la tabla house

Cuestiones relacionadas