Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
2012
oracle
Introducao O que e ? Vantagens. Sintaxe. Denicoes No que diferencia das demais funcoes de agregacao ? Funcoes. ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance. Conclusao. Referencias
Deivid Bitti Padilha Entendendo Oracle Analytic functions
oracle
Sumario
1
2 3
Introducao O que e ? Vantagens. Sintaxe. Denicoes No que diferencia das demais funcoes de agregacao ? Funcoes. ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance. Conclusao. Entendendo Oracle Analytic functions Referencias Deivid Bitti Padilha
oracle
O que e ?
Funcoes analticas (FA) sao um conjunto de comandos e conceitos que permitem computar um valor agregado baseado em um conjunto de linhas. Normalmente, muitas funcionalidades que sao fornecidas nativamente sao feitas na mao, utilizando comandos SQL padrao com joins, subqueries, clausula WITH, etc. Porem, utilizar FA traz muitas vantagens.
oracle
Tendo o problema resolvido atraves de FA e, na maioria das vezes, muito mais performatico do que utilizando funcoes padroes. O comando SQL, normalmente ca menor, consequentemente mais legvel e de facil depuracao e teste. Algumas funcionalidades das FA so poderiam ser do uso de procedimentos PL/SQL. substitudas atraves
oracle
Tendo o problema resolvido atraves de FA e, na maioria das vezes, muito mais performatico do que utilizando funcoes padroes. O comando SQL, normalmente ca menor, consequentemente mais legvel e de facil depuracao e teste. Algumas funcionalidades das FA so poderiam ser do uso de procedimentos PL/SQL. substitudas atraves
oracle
Tendo o problema resolvido atraves de FA e, na maioria das vezes, muito mais performatico do que utilizando funcoes padroes. O comando SQL, normalmente ca menor, consequentemente mais legvel e de facil depuracao e teste. Algumas funcionalidades das FA so poderiam ser do uso de procedimentos PL/SQL. substitudas atraves
oracle
Sintaxe.
Normalmente, um SQL com FA tem a seguinte sintaxe :
oracle
Sumario
1
2 3
Introducao O que e ? Vantagens. Sintaxe. Denicoes No que diferencia das demais funcoes de agregacao ? Funcoes. ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance. Conclusao. Entendendo Oracle Analytic functions Referencias Deivid Bitti Padilha
oracle
DEPTNO 30 20
DEPT COUNT 6 5
Como podemos obervar naQuery-1 retorna departamentos com quantidade de funcionarios. Como sabemos, colunas que nao estao na clausula GROUP BY nao podem ser includas no SELECT.
Deivid Bitti Padilha Entendendo Oracle Analytic functions
oracle
SELECT EMPNO, DEPTNO, COUNT (1) OVER (PARTITION BY DEPTNO) AS DEPT COUNT FROM SCOTT.EMP WHERE DEPTNO IN (20, 30);
Query-2
Ja na Query-2 que utiliza FA, conseguimos trazer o total juntamente com todas as linhas.
Deivid Bitti Padilha Entendendo Oracle Analytic functions
oracle
Consideracoes.
Como observado, a principal diferenca entre funcoes de agregacao e FA e que uma agrupa o resultado e a outra nao. Utilizando FA, o totalizador se repete para cada registro do resultado, e assim como em qualquer SQL sem GROUP BY, qualquer coluna ou expressao pode ser inserida na clausula SELECT, como por exemplo a coluna DEPNO na Query-2. As Funcoes Analticas sao computadas apos todos os JOINS, clausula WHERE, GROUP BY e HAVING presentes na consulta. O ORDER BY principal e feito apos a FA, desta forma colunas de FA podem aparecer no ORDER BY principal. Caso o comando PARTITION e <window clause> for omitido dentro de OVER() sera computado todos os registros limitados pela clausula WHERE. Observe os resultados da Query-3 e compare com a Query-4.
Deivid Bitti Padilha Entendendo Oracle Analytic functions
oracle
Consideracoes.
Como observado, a principal diferenca entre funcoes de agregacao e FA e que uma agrupa o resultado e a outra nao. Utilizando FA, o totalizador se repete para cada registro do resultado, e assim como em qualquer SQL sem GROUP BY, qualquer coluna ou expressao pode ser inserida na clausula SELECT, como por exemplo a coluna DEPNO na Query-2. As Funcoes Analticas sao computadas apos todos os JOINS, clausula WHERE, GROUP BY e HAVING presentes na consulta. O ORDER BY principal e feito apos a FA, desta forma colunas de FA podem aparecer no ORDER BY principal. Caso o comando PARTITION e <window clause> for omitido dentro de OVER() sera computado todos os registros limitados pela clausula WHERE. Observe os resultados da Query-3 e compare com a Query-4.
Deivid Bitti Padilha Entendendo Oracle Analytic functions
oracle
Consideracoes.
Como observado, a principal diferenca entre funcoes de agregacao e FA e que uma agrupa o resultado e a outra nao. Utilizando FA, o totalizador se repete para cada registro do resultado, e assim como em qualquer SQL sem GROUP BY, qualquer coluna ou expressao pode ser inserida na clausula SELECT, como por exemplo a coluna DEPNO na Query-2. As Funcoes Analticas sao computadas apos todos os JOINS, clausula WHERE, GROUP BY e HAVING presentes na consulta. O ORDER BY principal e feito apos a FA, desta forma colunas de FA podem aparecer no ORDER BY principal. Caso o comando PARTITION e <window clause> for omitido dentro de OVER() sera computado todos os registros limitados pela clausula WHERE. Observe os resultados da Query-3 e compare com a Query-4.
Deivid Bitti Padilha Entendendo Oracle Analytic functions
oracle
OVER().
EMPNO 7782 7839 7934 7369 7566 7788 7876 7902 DEPTNO 10 10 10 20 20 20 20 20 TOTAL 8 8 8 8 8 8 8 8
SELECT EMPNO, DEPTNO, COUNT (1) OVER () AS TOTAL FROM SCOTT.EMP WHERE DEPTNO IN (20, 30) ORDER BY 1,2;
Query-3
TOTAL 8
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
Sumario
1
2 3
Introducao O que e ? Vantagens. Sintaxe. Denicoes No que diferencia das demais funcoes de agregacao ? Funcoes. ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance. Conclusao. Entendendo Oracle Analytic functions Referencias Deivid Bitti Padilha
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
Estas tres funcoes associam um ` valor inteiro a linha dependendo da sua ordem, e por esse motivo que serao mostradas na mesma secao.
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER( )
ROW NUMBER captura o numero da linha para registros de muito utilizado em relatorios, especialmente uma particao. E em lugares onde particoes diferentes tem numeros de linha distintos. Na Query-5, a funcao ROW NUMBER() e usada para obter a ordem de dos empregados em cada departamento, baseado na sua data de contratacao, coluna HIREDATE.
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
SELECT EMPNO, DEPTNO, HIREDATE, ROW NUMBER () OVER (PARTITION BY DEPTNO ORDER BY HIREDATE NULLS LAST) AS ORDEM FROM SCOTT.EMP WHERE DEPTNO IN (10, 20) ORDER BY DEPTNO, ORDEM
Query-5
Como podemos observar na Query-5, a coluna ORDEM contem a ordem de contratacao do empregado, por departamento.
Deivid Bitti Padilha Entendendo Oracle Analytic functions
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
Tanto RANK() quanto DENSE RANK() exibem a posicao do registro baseado em valores de colunas ou expressoes. Caso exita 2 registros na posicao N, RANK() declara duas posicoes N, ignora a posicao N+1 e atribui a posicao N+2 ao proximo registro. Ja DENSE RANK() declara duas posicoes N mas nao ignora a posicao N+1. Para entendermos melhor, vejamos o exemplo no proximo slide.
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
SELECT EMPNO,DEPTNO,SAL, RANK () OVER (PARTITION BY DEPTNO ORDER BY SAL DESC NULLS LAST) RANK, DENSE RANK () OVER (PARTITION BY DEPTNO ORDER BY SAL DESC NULLS LAST) D RANK FROM SCOTT.EMP WHERE DEPTNO IN (10, 20) ORDER BY 2,RANK; Query-6
Na Query-6 vemos o uso de RANK() e DENSE RANK(). Para o DEPTNO 20, teremos dois registros na primeira posicao (EMPNO 7788 and 7902). Tanto RANK() quanto DENSE RANK() exibira os registros no topo. RANK() ignora o proximo valor que e 2, sendo assim o proximo empregado (EMPNO 7566) e colocado na posicao 3, ja com DENSE RANK() isso nao acontece.
Deivid Bitti Padilha Entendendo Oracle Analytic functions
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
LEAD e LAG
LEAD tem a habilidade de computar uma expressao nas proximas linhas (linhas existentes apos a linha corrente) e retorna o valor para a linha corrente. ` A sintaxe do LAG e similar a do LEAD, a diferenca e que o LAG ` computa linhas anteriores a linha corrente. A sintaxe do LEAD ou LAG e a seguinte: LEAD | LAG (<sql expr>, <offset>, <default>) OVER (<analytic clause>)
ao. <sql expr> E a expressao SQL a ser calculada na linha em quest ` <offset> e o indice relativo a linha atual das linhas posteriores no caso do LEAD ou anteriores quando for usado LAG, deve ser um inteiro positivo, o default e 1. <default> e o valor a ser retornado, caso <offset> apontar para uma linha fora do range da particao.
Deivid Bitti Padilha Entendendo Oracle Analytic functions oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
Query-8
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
Query-9
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
DEPTNO 20 30 30 20 30 10 30 30 10 30 20 10
YEAR FROM P3 TO F1 1980 1 1981 2 1981 3 1981 4 1981 5 1981 5 1981 5 1981 5 1981 5 1981 5 1981 4 1982 1 Deivid Bitti Padilha
FROM F1 TO F3 0 3 3 3 3 3 3 3 2 1 oracle 0 0
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
oracle
ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance.
Denindo as clausulas PARTITION BY e ORDER BY para colunas indexadas (ordenadas de acordo com PARTITION e entao ORDER BY na FA) ira promover excelente performance. Na Query-5, por exemplo, um ndice composto contendo as colunas DEPNO e HIREDATE talvez teria uma melhoria de performance. Mesmo na ausencia dos ndices as funcoes analticas fornecem o desempenho aceitavel mas existe a necessidade fazer a classicacao para a clausula PARTITION BY e ORDER BY. Se a query contiver funcoes analticas multiplas, classicar e particionar em duas colunas diferentes deve ser evitado caso as duas nao forem indexadas.
oracle
Referencias
Sumario
1
2 3
Introducao O que e ? Vantagens. Sintaxe. Denicoes No que diferencia das demais funcoes de agregacao ? Funcoes. ROW NUMBER, RANK e DENSE RANK LEAD e LAG FIRST VALUE e LAST VALUE Funcao FIRST e LAST Especicando <Window Clause> Ordem de computacao e dicas de performance. Conclusao. Entendendo Oracle Analytic functions Referencias Deivid Bitti Padilha
oracle
Referencias
Como pudemos observar nesta leitura, o mundo do SQL do Oracle e muito mais amplo do que se imagina, indo muito alem dos velhos comandos conhecidos (SELECT, FROM, WHERE, HAVING,..etc) o importante para quem escreve comandos SQL e que se saiba o poder que temos em nossas maos. O uso de funcoes analticas nativas do Oracle nos permite tratar problemas complexos com extrema performance, de maneira ecaz e exvel com um codigo elegante e legvel (claro, legvel para quem entende). E espero que agora voce entenda.
oracle
Referencias