ORA-01442: la columna que desea modificar a not null es ya not null

408 views
Skip to first unread message

felipe javier viñoles gutierrez

unread,
Oct 18, 2013, 9:43:38 AM10/18/13
to symfo...@googlegroups.com
Beun dia compañeros , 

Les cuento mi problema, estoy realizando un proyecto en Symfony2 y por primera vez estoy usando ORACLE como base de datos,
la base de datos ya estaba realizada por lo cual tuve que hacer el proceso de ingeniería inversa para generar mis entidades.. 
El problema que tengo es que cuando quiero modificar el esquema (php app/console doctrine:schema:update --force) agregando un atributo mas en cualquier entidad me sale este error..

ORA-01442: la columna que desea modificar a not null es ya not null.

serà que alguien sabe como se podría solucionar???

Muchas gracias de antemano .

oyepez003

unread,
Oct 18, 2013, 11:25:22 AM10/18/13
to symfo...@googlegroups.com
Hola.

Te da el error y no continua el update de la BD.?

felipe javier viñoles gutierrez

unread,
Oct 18, 2013, 11:46:14 AM10/18/13
to symfo...@googlegroups.com
exacto me da el error y no hace el update

oyepez003

unread,
Oct 18, 2013, 11:50:27 AM10/18/13
to symfo...@googlegroups.com
Entonces lo mas rapido para resolver el problema es que pases el parametro --dump-sql y ejecutes el SQL desde algun IDE como por ejemplo SQL Developer.

Luego puedes ejecutar php app/console doctrine:schema:update --help y verifica si existe alguna opcion que puedas pasarle para que no te pase ese error, por ejemplo las opciones --quiet o --proccess-isolation quizas ayuden.

Saludos cordiales.


El viernes, 18 de octubre de 2013 09:13:38 UTC-4:30, felipe javier viñoles gutierrez escribió:

felipe javier viñoles gutierrez

unread,
Oct 18, 2013, 11:54:37 AM10/18/13
to symfo...@googlegroups.com
ok , pero no me afectaría la data que ya tengo registrada en la base de datos?? digo al ejecutar el sql ??? gracias..


--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es
 
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/symfony-es/aPexJETjqLs/unsubscribe. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.



--
Atentamente:
Felipe Viñoles
Tlf: 0058 414 134 11 27.

oyepez003

unread,
Oct 18, 2013, 11:58:51 AM10/18/13
to symfo...@googlegroups.com
Por debajo el comando doctrine:schema:update lo que hace es ejecutar el mismo SQL que devuelve el dump, asi que si se borra algo se borrara si se ejecuta desde la consola o desde SQLDeveloper.

Por si acaso mejor realiza un respaldo de las tablas involucradas en ese update.

Saludos.

felipe javier viñoles gutierrez

unread,
Oct 18, 2013, 12:32:25 PM10/18/13
to symfo...@googlegroups.com
ejecute el dump-sql pero me sigue dando el mismo error te muestro:


[SQL] ALTER TABLE ASOC_COMPONENTE_FORMA MODIFY (FECHA_CREACION  TIMESTAMP(0),
 ID_ASOC_COMPONENTE_FORMA  NUMBER(10) , ID_COMPONENTE_ACT_TITULO  NUMBER
(10) , ID_FORMA  NUMBER(10) )
Affected rows: 0
Time: 0.016ms

[SQL] ALTER TABLE CARGO MODIFY (DESCRIPCION  VARCHAR2(200) NOT NULL, FECHA_CREACION  TIMESTAMP(0) NOT NULL, ID_CARGO  NUMBER(10) NOT NULL, ID_EMPRESA  NUMBER(10) DEFAULT NULL, ID_USUARIO_CREACION  NUMBER(10) DEFAULT NULL)
[Err] ORA-01442: la columna que desea modificar a NOT NULL es ya NOT NULL


felipe javier viñoles gutierrez

unread,
Oct 18, 2013, 3:53:23 PM10/18/13
to symfo...@googlegroups.com
buenas tardes hermano, 

el problema que se esta presentando es de compatibilidad con oracle, ya hice una prueba con MYSQL y genere el esquema a partir de mis entidades y si funcionó (inclusive con modificación de tablas al agregar un atributo nuevo ),  no se si hay una forma especial de compatibilidad/configuración con oracle que desconozco?? 

Daniel Cabrera

unread,
Oct 19, 2013, 3:27:01 AM10/19/13
to symfo...@googlegroups.com

Lo q debes hacer es la actualizacion a mano..columna por columna

Has debido annadir ya el not null a la columna en algun momento y.por eso genera error

Coge el alter modify y separalo por sentencias y ejecuta una a una a ver.

SQL] ALTER TABLE CARGO MODIFY (DESCRIPCION VARCHAR2(200) NOT NULL, FECHA_CREACION TIMESTAMP(0) NOT NULL, ID_CARGO NUMBER(10) NOT NULL, ID_EMPRESA NUMBER(10) DEFAULT NULL, ID_USUARIO_CREACION NUMBER(10) DEFAULT NULL) [Err] ORA-01442: la columna que desea modificar a NOT NULL es ya NOT NULL

Seria

SQL] ALTER TABLE CARGO MODIFY (DESCRIPCION VARCHAR2(200) NOT NULL)

SQL] ALTER TABLE CARGO MODIFY (FECHA_CREACION TIMESTAMP(0) NOT NULL)

..,

Alguna sentencia fallara .. o todas..

Si quieres ir mas rapido.saca el esquema de las tablas (no datos) y.comprueba la definicion.con la que te saca sf.

Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a symfony-es+...@googlegroups.com.

felipe javier viñoles gutierrez

unread,
Oct 21, 2013, 8:36:28 AM10/21/13
to symfo...@googlegroups.com
Buen día amigo Daniel , el problema es que si hago las sentencias una por una perdería mucho tiempo y la idea es aprovechar los comandos de doctrine..  por ejemplo si agrego un atributo mas debería hacerlo mediante mi modelo echo en php y luego hacer un update y no hacerlo desde la base de datos...

Hice una prueba en mysql y funciona perfectamente...

oyepez003

unread,
Oct 21, 2013, 8:45:37 AM10/21/13
to symfo...@googlegroups.com
Si funciona bien en MySQL y no en ORACLE, lo mejor aqui es que abras un issue en github.

Saludos.

Jeronimo SALAZAR RAMIREZ

unread,
Oct 21, 2013, 11:00:59 AM10/21/13
to symfo...@googlegroups.com
Pero me imagino que de MySQL genero todo desde el modelo, ya hiciste la prueba de generar todo desde el modelo en oracle para ver si funciona. Por ahi habia leido que crear el modelo desde la bd no garantiza que todo funcione.
-------------------------------------------------------
Si programas  en PHP, usa Symfony
-------------------------------------------------------
Navega mas seguro con FireFox
------------------------------------------------------

felipe javier viñoles gutierrez

unread,
Oct 21, 2013, 11:36:06 AM10/21/13
to symfo...@googlegroups.com
el problema es que el proyecto ya tenia gran parte de la base de datos creada antes de hacer el modelo así que tuve que realizar la ingeniería inversa por eso.. 
hace un rato hice este comando 

php app/console doctrine:schema:validate 
y me generò este resultado , todo esto apuntando a oracle..

[Mapping]  OK - the mapping files are correct

[Database] FAIL- the database schema is not in sync with the current mapping file


Victor Hugo Cornejo Calderon

unread,
Oct 21, 2013, 12:35:53 PM10/21/13
to symfo...@googlegroups.com
Buen dia a todos, y disculpen que meta mi cuchara.

Es correcto que lo ideal es aplicar los cambios con los comandos de consola de doctrine. Pero si analizan, es poco probable sobre todo en un escenario donde la aplicación no ha sido construida desde cero, que puedas aplicar los cambios de forma automática.

El porque es bien sencillo, considero que es mucho riesgo aplicar script (cambios de estructura) sin haber realizado una standarizacion u homologacion de la base de datos para trabajar con Symfony y doctrine. 

El ambiente de desarrollo o pruebas es el mas adecuado para esta etapa inicial porque el riesgo de perdida de datos es mínimo. Pero en producción el riesgo  es altísimo. El método manual es mas complicado pero es mas seguro.

Me sugerencia seria:

1. Genera con Ingenieria inversa las tablas en el ambiente de desarrollo.
2. Generadas las clases, actualiza las relaciones ya que la ingeniería inversa no las crea.
3. Validado que todos esta bien con tu clases, ejecuta contra el ambiente de "desarrollo" los comandos doctrine:schema:drop y doctrine:schema:create para destruir y recrear el esquema.
4. En este punto podrías probar que todo te funcione, y es el momento adecuado para comparar la nuestra estructura del ambiente desarrollo , con las estructuras originales de producción. Muy seguramente serán diferentes, y estos serán los primeros cambios que deberías documentar.

A partir de este punto puedes iniciar a hacer los cambios que te han solicitado.

Todo esto te lo sugiero porque inicialmente la base de datos no fue diseñada para trabajar con doctrine y menos con symfony, y seguramente necesitara ajustes para su correcto funcionamiento. 

Esta etapa de "standarizacion o homologacion" te quitara muchos dolores de cabeza mas adelante.

Victor

felipe javier viñoles gutierrez

unread,
Oct 21, 2013, 1:07:09 PM10/21/13
to symfo...@googlegroups.com
ok, bueno seguí tu recomendación, ahora se me presenta un problema con una tabla en la base de datos y me dice que el nombre no es valido, lo curioso es que si lo creó pero cuando hago el update me da ese error.. pero si hace los cambios...

felipe javier viñoles gutierrez

unread,
Oct 21, 2013, 5:26:50 PM10/21/13
to symfo...@googlegroups.com
Bueno a ver si a alguien le pasa lo mismo, esto fue lo que hice seguí un poco la idea del amigo victor hugo, aunque seguí teniendo problemas por esto de las claves foráneas ya que en el respaldo que hice las claves foráneas tenían un nombre de para ser identificadas (nombre de referencia), lo que hice fue reemplazar los nombres que me generaba doctrine por los originales (anteriores que estaban en el respaldo de la base de datos) y así se pudo importar la data nuevamente... 

no quería hacerlo así pero fue la solución que pude encontrar gracias a su ayuda y ahora si puedo hacer los comando de doctrine .. saludos y muchas gracias
Reply all
Reply to author
Forward
0 new messages