quarta-feira, 18 de julho de 2012

Despivotando

Recentemente eu comecei a participar nos forums da Oracle Technology Network para ajudar a comunidade (e também ser ajudado). Há pouco tempo atrás respondi uma pergunta interessante que gostaria de compartilhar com vocês, pois mostra o uso de uma nova feature do Oracle 11g: a clausula UNPIVOT do SELECT.

O objetivo da pergunta era, dado uma tabela com N colunas, mostrar através de uma query quais colunas tem valores nulos e em quais linhas. A principio uma solução simples porém trabalhosa, como apontado pelo OP, seria fazer uma query com diversas clausulas OR testando cada coluna isoladamente por NULL. Porém isso ainda envolveria um trabalho adicional para analisar o result set e identificar quais são as colunas nulas, possivelmente envolvendo uma infinidade de CASEs, ou ainda, substituindo o OR por UNION ALL e criando uma query monstruosa.

Pois bem, é aí que entra a mágica do UNPIVOT. Em uma única clausula podemos transformar todas as colunas separadas numa única coluna e varrer apenas esta coluna pelos valores nulos. Infelizmente não tenho o Oracle 11g disponível aqui para postar o resultado, mas encorajo vocês a executarem o código abaixo:

select * from (select rownum row_num, case when dbms_random.value < 0.5 then null else dbms_random.value end a, case when dbms_random.value < 0.5 then null else dbms_random.value end b, case when dbms_random.value < 0.5 then null else dbms_random.value end c, case when dbms_random.value < 0.5 then null else dbms_random.value end d, case when dbms_random.value < 0.5 then null else dbms_random.value end e from dual connect by level <= 10) unpivot include nulls (my_value for my_column in(a, b, c, d, e)) where my_value is null;

Para quem quiser acessar a pergunta original, basta seguir o link:

https://forums.oracle.com/forums/message.jspa?messageID=10434991

segunda-feira, 16 de julho de 2012

Publicações na Oracle Technology Network

Hoje tenho o prazer de divulgar a vocês o resultado positivo do meu último trabalho: a publicação de dois artigos meus na Oracle Technology Network. Estes artigos tratam basicamente da relação das trocas de contexto com a performance de procedimentos e os mecanismos para otimizá-las. Para quem quiser conferir, basta seguir os links abaixo:



Além disto, para quem tem vocação para a escrita e gostaria de compartilhar seu conhecimento nas tecnologias da Oracle, gostaria de fazer o convite para enviarem artigos para a OTN. Os detalhes estão no link abaixo:


Para finalizar, agradeço o apoio que me foi dado pela publicação destes artigos e fiquem ligados que em breve devo apresentar novos tópicos tanto neste blog como na OTN.