Una imagen vale más que mil
palabras... o datos ;-)
A menudo cuando obtenemos resultados
de SQL, encontramos a faltar un sistema
visual de alarmas. Por ejemplo:
si queremos visualizar los impagados,
nos podria interesar que en
función del volumen se nos represente
en diferentes colores a modo de alarma.
Para mostrar diferentes colores en el resultado
SQL, pondremos el byte de atributo delante
del campo (o la linea) a mostrar, de igual manera que
lo hacemos en el SEU para 'iluminar' las líneas de comentario,
algunos códigos que podemos utilizar:
x'20' Verde normal
x'21' Verde reverse
x'22' Alta intensidad
x'23' Alta intesidad reverse
x'28' Rojo
x'29' Rojo reverse
x'2A' Blink
x'2B' Blink reverse
Para poder definir los rangos de alarmas, utilizaremos
la instrucción CASE del SQL para
indicar las situaciones que queremos
controlar. El funcionamiento de esta
instrucción es similar al que tiene en RPG IV, por lo
que no nos extenderemos en el tema.
+----------------------------------------------------------------+
¦ ¦
¦ ¦
¦ +-ELSE NULL---------------+ ¦
¦ >--CASE----searched-when-clause----+--------+--END---------> ¦
¦ +-simple-when-clause---+ +-ELSE--result-expression-+ ¦
¦ ¦
¦ searched-when-clause: ¦
¦ <-----------------------------------------------+ ¦
¦ +----WHEN--search-condition--THEN----result-expression------¦ ¦
¦ +-NULL--------------+ ¦
¦ ¦
¦ simple-when-clause: ¦
¦ <-------------------------------------+ ¦
¦ +--expression--WHEN--expression--THEN----result-expression--¦ ¦
¦ +-NULL--------------+ |
¦ ¦
+----------------------------------------------------------------+
En el ejemplo tratado a
continuación, mostraremos todas las tablas del sistema
que tengan más de 100 campos, en alta intensidad las
que tengan más de 250 campos, de
color rojo las que tengan más de 1.000
campos y la biblioteca en blink y
el resto en rojo, para aquellas que tengan más de
2.500 campos.
Para obtener este informe, haremos STRSQL y copiaremos
la instrucción:
SELECT CASE
WHEN count(*) > 2500 THEN (X'2A'||SYSTEM_TABLE_SCHEMA||X'28')
WHEN count(*) > 1000 THEN (X'28'||SYSTEM_TABLE_SCHEMA)
WHEN count(*) > 250 THEN (X'22'||SYSTEM_TABLE_SCHEMA)
else (' '||SYSTEM_TABLE_SCHEMA)
end AS LIB,
SYSTEM_TABLE_NAME AS TABLE,
COUNT(*) AS FIELDS
FROM QSYS2/SYSCOLUMNS
group by system_table_schema, system_table_name
having count(*) > 100

|