terça-feira, agosto 22, 2006

Oracle – Diferença no Group By no 10G

Nas versões 8.x e 9 do Oracle, ao se fazer o Group by o resultado já vinha ordenado na ordem das colunas do Group By, como se houvesse um Order By implícito. Este procedimento ocorria, mas não era documentado pela Oracle.

A partir do Oracle 10G, o Order By não ocorre mais, sendo necessário realizar a ordenação manual. Este procedimento está documentado no manual do Oracle 10G.

A partir desta mudança vai uma dica. Nunca confie no que o SGBD faz implicitamente. Se você quer o resultado do Group By ordenado, utilize o Order By para garantir isso.

Oracle - Trabalhando com duas transações

Artigo enviado por Wellington Fernandes do CarmoAnalista de Sistemas
Pessoal, na semana passada precisei usar mais um recurso interessante do oracle que novamente compartilho com vocês.

Eu tinha um bloco pl/sql que, apesar de ter alguns delete, insert e update no seu conteúdo, deveria fazer um commit apenas no final da execução, geralmente o processamento é feito em segundos. Acontece que o update, sem um motivo aparente, começou a demorar mais que o normal. Com isso logo veio a pergunta, porque não fazer um commit a cada comando? Considerando o contexto da rotina, o commit a cada comando não seria possível, exceto em um update. Mas como fazer um commit isolado no meio da transação? A resposta é pragma autonomous_transaction;

Funciona apenas dentro de uma procedure, você cria uma procedure e coloca a declaração pragma autonomous_transaction; pronto essa procedure será considerada uma transação a parte, execute o seu comando e execute o commit.

PS: Funciona desde o Oracle 8i

Exemplo

Begin

Insert ......
Delete ......

Chamada da procedure com a transação autônima.......esse pedaço terá um commit a parte

Etc.......

Commit;
End;