quarta-feira, 18 de setembro de 2013

Fazendo Pivoteamento no Oracle 11g


Inúmeras vezes precisei fazer o pivoteamento ou transposição de dados e sempre usei aquela velha estratégia de MAX com DECODE e GROUP BY. Porem isso deixava uma limitação na quantidade de campos que que precisava pivotear. Com a função PIVOT do Oracle 11g isso simplificou muito.

Vamos supor que tenhamos a query abaixo, onde o nome da tabela pode ser variável

SELECT column_name

FROM SYS.all_tab_columns
WHERE OWNER = 'SCOTT'
AND TABLE_NAME = 'EMP';

Para transformar as linhas com o nome das colunas em uma lista separada por virgula, fiz isso:


SELECT replace(

            replace(
                    replace (column_name_xml,'<PivotSet><item><column name = "COLUMN_NAME">'),
                    '</column><column name = "ERR">1</column></item><item><column name = "COLUMN_NAME">',','),
              '</column><column name = "ERR">1</column></item></PivotSet>') as LISTA_COLUNAS
FROM (SELECT column_name
        FROM SYS.all_tab_columns
          WHERE OWNER = 'SCOTT'
          AND table_name = 'EMP')
PIVOT XML (count(1) AS err FOR (column_name) IN (SELECT column_name
                                                FROM SYS.all_tab_columns
                                                  WHERE OWNER = 'SCOTT'
                                                  AND table_name = 'EMP'));
                                                                                                                                                                                             
Precisei usar PIVOT XML pois a função PIVOT não aceita uma subquery, apenas uma listagem.

segunda-feira, 11 de julho de 2011

Oracle - Query que mostra o tamanhos das Tablespaces

Query que mostra a lista de tablespace, espaço utilizado, espaço livre, espaço total e percentual livre:


SELECT
   DF.TABLESPACE_NAME                                  "TABLESPACE",
   (DF.TOTALSPACE - FS.FREESPACE)              "USED MB",
   FS.FREESPACE                                                      "FREE MB",
   DF.TOTALSPACE                                                  "TOTAL MB",
   ROUND(100 * (FS.FREESPACE / DF.TOTALSPACE)) "PCT. FREE"
FROM
   (SELECT
      TABLESPACE_NAME,
      ROUND(SUM(BYTES) / 1048576) TOTALSPACE
   FROM DBA_DATA_FILES
   GROUP BY
      TABLESPACE_NAME
   ) DF,
   (SELECT
      TABLESPACE_NAME,
      ROUND(SUM(BYTES) / 1048576) FREESPACE
   FROM DBA_FREE_SPACE
   GROUP BY
      TABLESPACE_NAME
   ) FS
WHERE
   DF.TABLESPACE_NAME = FS.TABLESPACE_NAME(+)
   --AND DF.TABLESPACE_NAME = 'RUN_DATA'
   --AND FS.TABLESPACE_NAME = 'RUN_DATA'
;

Query cedida pelo amigo Cesar Toschi.

Oracle - Query que mostra quais são as maiores tabelas

Query que seleciona a lista das maiores tabelas. Pode-se filtrar por owner.


SELECT * FROM DBA_TABLES
WHERE TABLESPACE_NAME = 'RUN_DATA'
AND BLOCKS IS NOT NULL
ORDER BY BLOCKS DESC;

Oracle - Matar uma sessão

Para matar uma sessão no Oracle:


1) Select que mostra as sessoes do user NOME
select * from V$SESSION
where username = 'NOME';

2) Selecionar os campos SID e SERIAL# da sessão que deseja matar
SID = 208
SERIAL# = 26195

3) Executar o comando abaixo:
Alter system kill session '208,26195';

domingo, 8 de maio de 2011

SQLDeveloper - Keep Alive

SQLDeveloper - Keep Alive

Eu estava com problemas de conexão com a base do cliente. Quando eu ficava mais de 15 minutos sem executar uma query o firewall "matava" a conexao. Então descobri um plugin no Oracle SQLDeveloper que a cada "X" minutos faz um "ping" no banco de destino.
(1) Para isso basta baixar o arquivo do link abaixo:
https://sites.google.com/site/keepaliveext/oracle.sqldeveloper.keepalive.jar?attredirects=0

(2) Coloque o arquivo oracle.sqldeveloper.keepalive.jar na pasta ..\sqldeveloper-x.x.x.x.x\sqldeveloper\sqldeveloper\extensions

(3) Clique sobre a conexão salva no SQLDeveloper e configure o plugin, informando o tempo em minutos

(4) Após configurar clique em "Activate" e depois conecte no Banco de Dados

domingo, 10 de abril de 2011

Dica - Open Proj

Precisei planejar alguns projetos e não queria utilizar o M$ Project. Então busquei uma solução Open Source e encontrei o Serena OpenProj [http://openproj.org/openproj]. Já usei em dois projetos e até agora está correspondendo as expectativas. Muito bom mesmo.
Recomendo!!

terça-feira, 21 de dezembro de 2010

Para alterar o idioma do ODI versão 10

Editar o arquivo odi_params.bat que está em %ODI_JAVA_HOME%/bin e localizar a linha com ODI_ADDITIONAL_JAVA_OPTIONS. Então fazer o SET do idioma desejado como o exemplo abaixo:

Inglês:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=en" "-Duser.country=US"

Português Brasil:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=pt" "-Duser.country=BR"

Francês:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=fr" "-Duser.country=CA"