es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es lo mismo utilizar MATCHES (* + “&” + *) y no tener parámetros en un FOR EACH en Progress 4GL?

Entonces hice lo siguiente PARA CADA uno

PARA CADA insp_cd
DONDE insp_cd.status_ = 1
Y insp_cd.item COINCIDE_CON('*' + pc-itemPost + '*')
Y insp_cd.update_at < NOW:

Entonces, cuando pc-itemPost es “”, ¿debo evitar usar COINCIDE_CON? Como:

SI pc-itemPost = "" ENTONCES:
PARA CADA insp_cd
DONDE insp_cd.status_ = 1
Y insp_cd.update_at < NOW:
...
FIN.
SINO:
PARA CADA insp_cd
DONDE insp_cd.status_ = 1
Y insp_cd.item COINCIDE_CON('*' + pc-itemPost + '*')
Y insp_cd.update_at < NOW:

Sé que es muy lento debido al escaneo de la tabla, pero me gustaría saber si hay alguna diferencia. Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en OpenEdge y Progress-4GL, recomendaría que no es necesario evitar el uso de MATCHES cuando pc-itemPost está en blanco. La declaración original FOR EACH debería funcionar bien en ese caso.

    La razón es que la cláusula MATCHES simplemente encontrará cualquier cadena que no contenga caracteres, lo que siempre será verdadero. Esto significa que la cláusula WHERE esencialmente se convertirá en “insp_cd.status_ = 1 AND insp_cd.update_at < NOW:”, que es lo mismo que la cláusula WHERE en el segundo ejemplo.

    Por lo tanto, no es necesario agregar una declaración IF adicional para verificar si pc-itemPost está en blanco. También es importante tener en cuenta que las exploraciones de tablas pueden ser lentas, por lo que es una buena idea agregar índices apropiados a la tabla para acelerar la consulta.

Comments are closed.