Pregunta

Recientemente hemos tenido que trabajar un poco con una base de datos OpenEdge que utiliza un producto de terceros, y hoy (después de mucho esfuerzo), finalmente identificamos por qué una vista no arrojaba resultados. Esta vista en cuestión combina alrededor de 100 tablas separadas, y luego se consulta (tenemos derechos limitados para esta base de datos). Uno de los campos devueltos por esta vista es un literal de cadena codificado, en la línea de

'John Smith' AS TheName

Estábamos teniendo dificultades para ejecutar consultas que incluían esta cadena, que estábamos intentando RTrim (la vista devolvió muchos espacios finales) y luego concatenar con otro campo. Sin embargo, si usamos RTrim en este campo, en lugar de devolver un mensaje de error, o un valor nulo o algo así, la fila simplemente no se devolvió. No estábamos tratando de usarlo en una cláusula WHERE o JOIN, esto era simplemente parte de SELECT ... FROM VIEWNAME. Después de revisar la vista, parecía que la vista había detectado erróneamente la longitud de la cadena como 9 caracteres (no se especificó longitud en la definición), y RTrim simplemente no funcionó. Ahora, podría entender por qué esto podría conducir a un mensaje de error, o un valor NULL en SELECT, pero ¿por qué la fila simplemente no se devolvería en absoluto ? Esto no parece un buen comportamiento de SQL y nunca he visto que ocurra con ningún otro RDBMS.

Otra información: estamos realizando consultas de prueba a través de ODBC y WinSQL, con miras a que esto se incluya en una aplicación ASP.NET existente. No tenemos acceso al backend, excepto a través de esto, aunque tenemos derechos para crear vistas.

Actualización: Como un seguimiento extraño, ahora hemos descubierto que si intentamos consultar esta vista sin ninguna cláusula WHERE, no se devuelven registros. Esto puede tener la misma causa.

¿Fue útil?

Solución

Parece que podría estar relacionado con el ANCHO de SQL dentro de la base de datos de progreso. Un problema con Progress es que si el contenido del campo excede el ANCHO de SQL, obtendrá un comportamiento extraño de SQL (a veces el controlador puede fallar, otras veces no obtendrá resultados).

Para identificar esto, debe usar el comando dbtool para verificar si los ANCHOS de SQL pueden excederse.

Otros consejos

Asegúrate de no tener espacios en blanco. Recortar no elimina espacios en blanco, solo espacios. Los espacios en blanco tampoco son nulos. Hay una diferencia en el conjunto de caracteres mientras que no es visiblemente diferente en su editor. Me he encontrado con esto con algunas bases de datos, DBII, Oracle, PostGreSQL. Verifique el conjunto de caracteres de su editor e intente ver las tablas, es posible que no vea nada o que vea rectángulos grandes.

Eso suena como un comportamiento muy extraño. Simplemente codifique, realice el recorte y / o la manipulación de la cadena en la aplicación y siga su camino.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top