Durante la pasada semana me llevé un tiempo buscando por internet una explicación del por qué, cuando realizaba una aplicación, escribiendo casi el mismo código que otro que funciona, y a sabiendas que todo estaba correcto, la aplicación no hacía más que decirme que había un error.
Bueno, primero vamos a ponernos en situación. Estamos en un entorno Delphi, usando componentes ODAC para el acceso a la capa de datos y usando como servidor de base de datos un Oracle. Hasta aquí todo normal.
ORA-01036: número/nombre de variable no válido
Este error tan poco descriptivo para mi entender, fué buscado por todo google y lo único que encontré es que tengo un espacio en los parámetros. Es decir, que un error habitual es crear espacios a la hora de declarar los parámetros.
Después de muchas vueltas y crear mis módulos de pruebas unitarias, me da por probarlo en otro entorno con otro cliente de Oracle. Este cliente nos proporcionó un mensaje mucho más esclarecedor: ORA-00972
ORA-00972: Identificador demasiado largo
Con este mensaje me dió que pensar. Yo tenía una consulta a la cual le pasaba unos parámetros que tenían una longitud de 27 caracteres.
Cuando dicha consulta se abre, nos proporciona un conjunto de datos obtenidos de la base de datos, vamos, lo normal que debe de ocurrir. Hasta aquí bien.
El siguiente paso es hacer una inserción, esto ocurria correctamente porque el parámetro que se coloca en la parte de la inserción también tenía 27 caracteres.
El problema ocurría cuando se quería hacer una actualización. A los parámetros que se disponen en la zona de la actualización, se les pone el prefijo "OLD_". Esto, sumado con la longitud del parámetro original, suma el total de 31 caracteres y aquí es donde da el fallo.
Recomendaciones
- No usar nombres de columnas en oracle de más de 26 caracteres. Es muy sencillo llegar a este número si tenéis costumbre de usar nombres de cosas, como por ejemplo: CODIGO_TIPO_DINOSAURIO (22 caracteres). CODIGO_DESCRIPCION_DINOSAURIO (29 caracteres).
- Aprovecho para indicar que no se usen numéricos de longitud 9 y 10.
¿Os ha pasado alguna vez algo parecido?