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.

Reply via email to