- Este tópico contém 4 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 10 meses atrás por
fsitja.
-
AutorPosts
-
28 de janeiro de 2010 às 11:25 pm #92369
Fabiodjs
ParticipanteBoa tarde senhores
Gostaria de levantar uma lista de comandos incomuns para um posterior estudo.
exemplos:
connect by
rollup
casepoderiam me ajudar a ampliar esta lista?
Abraços
29 de janeiro de 2010 às 1:54 am #92371burga
ParticipanteExistem 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 ALLTodos são suportados pelo Oracle 10g, não sei em versões anteriores…
29 de janeiro de 2010 às 3:11 pm #92372Fabiodjs
ParticipanteObrigado amigo,
é justamente isso que estou procurando
se alguém tiver mais, por favor, não se acanhe 😀
abraços
29 de janeiro de 2010 às 4:20 pm #92374Rodrigo Mesquita
ParticipanteOracle 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 029 de janeiro de 2010 às 6:21 pm #92376fsitja
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
SUMNã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. -
AutorPosts
- Você deve fazer login para responder a este tópico.