Pues mi primera opción era probar con variables globales, pero pensaba que los valores eran globales a todas las sesiones.
Voy a explorarlo. Gracias por tu aportación. El jue., 2 abr. 2020 19:38, Jose de la Herrán Núñez < [email protected]> escribió: > Hola Javier, > > Sólo un pequeño apunte respecto a las variables globales. Aunque las > variables globales se crean generalmente con valores por defecto mediante > CREATE VARIABLE, cualquier sesión de base de datos puede modificar una > variable global mediante SET <variable> = valor, y ese valor sólo existirá > para esa sesión y mientras dure ésta. Es por el "scope" de las variables > globales: > > *Session scope: Global variables have a session scope. This means that > although they are available to all sessions that are active on the > database, their value is private for each sesión.* > > Te lo comento por si se te ocurre otra forma de solucionar tu problema > teniendo esto en cuenta. Por ejemplo, al iniciar la sesión, pedir al > usuario que establezca esos dos valores y ponerlos en variables globales, > que se mantendrán durante toda su sesión. > > Nosotros utilizamos esa técnica creando vistas sencillas sobre tablas > complejas (con mucha información de control de históricos y auditoría, por > ejemplo), para que devuelvan registros a una fecha concreta, por ejemplo. > Cada SELECT sobre una vista de esas, ejecuta internamente una cláusula > WHERE definida en la vista que utiliza variable(s) global(es) para filtrar > registros, pero cogería el valor que la(s) variable(s) tenga(n) en ese > momento para esa sesión. > > Salud para todos/as, > Potele > > El 02/04/2020 16:08 datil400 <[email protected]> escribió: > > > Hola a tod@s, > > no he sabido expresar de mejor manera la consulta que quiero haceros. > > Espero que todos vosotros, vuestros familiares y conocidos estéis bien y > viviendo el confinamiento de la mejor manera posible. > > Tengo una vista que resume información de varios archivos que contienen > millones de registros, no hable de uno o dos millones, hablo de 200 > millones. Por muchos índices y consejos del asesor de índices no consigo > que se ejecute en un tiempo razonable. > > Antes de crear un archivo de acumulados o una tabla materializada que me > mantenga siempre calculados los datos quiero probar otras alternativas (si > las hay). > > En esos 200 millones de registros sólo quiero tratar un grupo reducido, > por ejemplo el último mes o el último año. Aunque en el select sobre la > vista siempre selecciono el rango que quiero, realmente lo estoy haciendo > sobre el resultado de los cálculos que hace la vista, que siempre los hace > sobre el total de los registros de las tablas. > > Además, son cálculos que se hacer por partes dentro de la cláusula WITH. > > Lo que intento es que la vista sólo seleccione el grupo de registros de > cada una de las tablas. Un pequeño ejemplo: > > WITH > RESUMEN_TABLA1 > AS ( > SELECT * FROM TABLA1 WHERE campo BETWEEN <valor_inicial> AND > <valor_final> > ), > RESUMEN_TABLA2 > AS ( > SELECT * FROM TABLA2 WHERE campo BETWEEN <valor_inicial> AND > <valor_final> > ) > SELECT > * > FROM > TABLA > LEFT JOIN > RESUMEN_TABLA1 ON clave1 = clave > LEFT JOIN > RESUMEN_TABLA2 ON clave2 = clave > ; > > En la consulta de la vista > > SELECT > * > FROM > VISTA > WHERE > <valor_inicial> = '2020-01-01' AND <valor_final> = '2020-03-31' > > Realmente esto no se puede hacer en SQL pero simularlo. Se me ocurren > algunas soluciones: > > 1. Variables globales > > Cargar los valores de selección en variables globales que utilice la vista > internamente. Inconveniente, dos trabajos o usuarios distintos no podrían > hacer una consulta concurrente. > > 2. Procedimiento almacenado o UDTF > > Utilizar el paso de parámetros para seleccionar las filas de los > subselects, pero no sé cómo incoporarlas en una vista para que el usuario > pueda utilizar un Query, ODBC, etc. sin tener que utilizar el procedimiento > o UDTF. > > No sé si he sido capaz de explicarme (creo que no), pero ¿alguno vosotros > me puede dar alguna pista de cómo podria hacer lo que propongo? > > O simplemente estoy alucinando y es imposible hacerlo. > > Saludos a todos y gracias por vuestros comentarios. > > Javier > ____________________________________________________ > �nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) > Forum.Help400 � Publicaciones Help400, S.L. > > > [image: Logotipo Ayuntamiento Vitoria-Gasteiz] > <https://www.vitoria-gasteiz.org> > *José de la Herran Núñez* > Kordinazio Teknikoko Burua > Jefe del Área de Coordinación Técnica > Ayuntamiento de Vitoria-Gasteiz Informazioaren Teknologien Saila > Departamento de Tecnologías de la I nformación > Tel: work945161614 | Fax fax945161600 > [email protected] | www.vitoria-gasteiz.org > [image: Logotipo Green Capital] <https://www.vitoria-gasteiz.org> > ------------------------------ > KONFIDENTZIALTASUNA > > Komunikazio honen edukia eta honi erantsitako dokumentazio osoarena > konfidentziala da eta adierazitako jasotzaileari beste inori ez dagokio. > Zeu jasotzaile ez bazina, jakinaraz iezaguzu, mesedez, eta eskatu nahi > dizugu edukiaren berri inori ez esan eta mezua ezaba dezazula. > CONFIDENCIALIDAD > > El contenido de esta comunicación, así como el de toda la documentación > anexa, es confidencial y va dirigido únicamente al destinatario del mismo. > En el supuesto de que usted no fuera el destinatario, le solicitamos que > nos lo in dique y no comunique su contenido a terceros, procediendo a su > destrucción. > CONFIDENCIALITY > > The content of this communication and any attached information is > confidential and exclusively for the use of the addressee. > If you are not the addressee, we ask you to notify to the sender and do > not pass its content to another person, and please be sure you destroy it. > > ____________________________________________________ > Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) > Forum.Help400 © Publicaciones Help400, S.L.
____________________________________________________ �nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd ) Forum.Help400 � Publicaciones Help400, S.L.
