jueves, 11 de abril de 2013

ORA-01733

Aquí está un ejemplo sobre el error ORA-01733. Para empezar, necesitamos una tabla con datos: 

SQL> create table mi_tabla
  2  (mi_nombre varchar2(10))
  3  /

Tabla creada.

SQL> insert into mi_tabla
  2  values('Carlos')
  3  /

1 fila creada.

SQL>

Luego debemos crear una vista de la tabla. La vista tiene que incluir una columna virtual, es decir una columna que no corresponde a ningunos datos en la tabla. Decidí añadir una edad de 21 años a cada fila. No hay columna en la tabla para tomar nota de la edad. Así puse 21 en la vista y lo llamé edad. No es buena idea hacer éste con sus propias bases de datos. Estoy haciendolo simplemente para explicar el error:

SQL> create view mi_vista
  2  as select mi_nombre, 21 edad
  3  from mi_tabla
  4  /

Vista creada.

SQL> select * from mi_vista
  2  /

MI_NOMBRE        EDAD
---------- ----------
Carlos             21

SQL>

Se puede emplear la vista para poner al día mi_nombre porque la columna en la vista corresponde a la columna en la tabla: 

SQL> update mi_vista
  2  set mi_nombre = 'Manuel'
  3  where mi_nombre = 'Carlos'
  4  /

1 fila actualizada.

SQL>

Pero si Vd intenta actualizar edad, Oracle le da el error ORA-01733: 

SQL> update mi_vista
  2  set edad = edad + 1
  3  /
set edad = edad + 1
* ERROR en linea 2: 
ORA-01733: columna virtual no permitida aqui

SQL>

Si Vd quiere cambiar la edad, tiene que borrar la vista y recrearla con el nuevo valor.

No hay comentarios:

Publicar un comentario