dijous, 27 de desembre del 2007

Mostrar alarmes en resultats SQL DB/2

Una imatge val més que mil paraules... o dades.

A cops, quan visualitzem els resultats d'un SQL, trobem a faltar una alarma gràfica. Per exemple: Si volem visualitzar el volum de vendes a clients, potser interesant veure en diferents colors els diferents rangs de volum de vendes.

Per a visualitzar diferents colors en els resultats SQL posarem el byte d'atributs abans del camp (o línia) a mostrar. D'igual manera que 'pintem' les línies de comentari en el SEU, 'pintem' els resultats SQL. Alguns codis que podem emprar:

x'20' Normal
x'21' Reverse
x'22' HI
x'23' HI reverse
x'28' Red
x'29' Red reverse
x'2A' Blink
x'2B' Blink reverse

Per a definir els rangs d'alarmes, emprarem la instrucció CASE d'SQL. Funciona de manera similar a la instrucció CASE d'RPG IV.

+-------------------------------------------------------------------------------+
| |
| |
| +-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 proper exemple, mostrarem les taules del sistema que tenen més de 100 camps, i en HI les que tenen més de 250 camps, en roig les que tinguin més de 1000 i la biblioteca parpadejant i la resta en roig les que tinguin més de 2500 camps.

Per a veure el resultat SQL, executeu STRSQL i introduiu aquesta instrucció:

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

Aquest truc va guanyar el Hall of Fame Tip del mes d'octubre del 2001 a TechTarget.