Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #92369
    Fabiodjs
    Participante

      Boa tarde senhores

      Gostaria de levantar uma lista de comandos incomuns para um posterior estudo.

      exemplos:
      connect by
      rollup
      case

      poderiam me ajudar a ampliar esta lista?

      Abraços

      #92371
      burga
      Participante

        Existem mais alguns que a gente vê pouco, mas que podem ser bastante úteis, alguns dos abaixo são bastante conhecidos por DBA’s mas pouco utilizados pelos desenvolvedores. Segue uma listinha:

        CUBE
        expressoes regulares
        operadores ANY e ALL
        HAVING com subquery
        MERGE
        INSERT ALL
        FIRST INSERT
        WITH
        INTERSECT
        GROUPING SETS
        MINUS
        UNION ALL

        Todos são suportados pelo Oracle 10g, não sei em versões anteriores…

        #92372
        Fabiodjs
        Participante

          Obrigado amigo,

          é justamente isso que estou procurando

          se alguém tiver mais, por favor, não se acanhe 😀

          abraços

          #92374
          Rodrigo Mesquita
          Participante

            Oracle Pivot

            SQL> desc customers
            Name Null? Type
            —————————————– ——– —————————
            CUST_ID NUMBER(10)
            CUST_NAME VARCHAR2(20)
            STATE_CODE VARCHAR2(2)
            TIMES_PURCHASED NUMBER(3)

            select cust_id, state_code, times_purchased
            from customers
            order by cust_id;

            CUST_ID STATE_CODE TIMES_PURCHASED
            ——- ———- —————
            1 CT 1
            2 NY 10
            3 NJ 2
            4 NY 4

            ———————— PIVOT ————————————–
            select * from (
            select times_purchased, state_code
            from customers t
            )
            pivot
            (
            count(state_code)
            for state_code in (‘NY’,’CT’,’NJ’,’FL’,’MO’)
            )
            order by times_purchased
            /

            TIMES_PURCHASED ‘NY’ ‘CT’ ‘NJ’ ‘FL’ ‘MO’
            ————- ———- ———- ———- ———- ———-
            0 16601 90 0 0 0
            1 33048 165 0 0 0
            2 33151 179 0 0 0
            3 32978 173 0 0 0
            4 33109 173 0 1 0

            #92376
            fsitja
            Participante

              [quote=”burga”:1q2dh1wt]Existem mais alguns que a gente vê pouco, mas que podem ser bastante úteis, alguns dos abaixo são bastante conhecidos por DBA’s mas pouco utilizados pelos desenvolvedores. Segue uma listinha:[/quote]

              Infelizmente pouco utilizados. Lembrando daquele tópico um dia desses, desenvolvedor XGH (Extreme Go-Horse) é chegado mesmo é num “UNION ALL” ou “CURSOR FOR LOOP”.

              Curioso que tantas pessoas se esforcem tanto para aprender linguagens como Java, C, Perl (entre outras, inclusive PL/SQL) mas continuem deixando o gargalo de suas aplicações no banco de dados por utilizarem mal o BD ao escreverem SQLs, que é uma linguagem declarativa, fácil de entender e debugar, além de muito eficiente e rápida.

              Depois se coloca a culpa no Oracle, chama de lento e ameaça trocar pelo Postgres ou MySQL por serem “grátis”. Claro, para que ter uma Ferrari se o motorista anda com o freio de mão puxado?

              A grande sacada de usar funcionalidades avançadas de SQL é o ganho enorme de desempenho que se tem, pois a computação é toda feita no banco de dados, reduzindo I/O desnecessário em leitura de disco, tráfego de rede, consumo de memória e overhead com chaveamento de contexto entre as SQL e PL/SQL engines (ou Java, .NET, etc).

              Quanto a que estudar, eu sugiro analytic SQL functions, que na minha opinião mudam a forma da gente entender e escrever queries.

              http://download.oracle.com/docs/cd/E118 … ons004.htm

              Destaque para as funções abaixo que penso que são as mais úteis no dia-a-dia:
              AVG
              COUNT
              DENSE_RANK
              FIRST
              FIRST_VALUE
              LAG
              LAST
              LAST_VALUE
              LEAD
              MAX
              MIN
              NTH_VALUE
              NTILE
              PERCENT_RANK
              RANK
              ROW_NUMBER
              SUM

              Não confundir AVG, SUM, MAX, MIN e COUNT com as funções de agregação comuns. SQL analítico produz um resultado por linha sem agregar (windowing / janela móvel).

              Também recomendo uma leitura na cláusula MODEL, que possibilita alguns cálculos semelhantes ao que é feito em planilhas Excel.

              http://download.oracle.com/docs/cd/E118 … lmodel.htm

              Abraço,
              Francisco.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.