artigo SQL Magazine 30 - PL/SQL 10g

Artigo da Revista SQL Magazine -Edição 30.

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.
Os artigos dessa edição estão disponíveis somente através do formato HTML.

Clique aqui para ler todos os artigos desta edição 

PL/SQL 10g: o que mudou?

 

O PL/SQL é a linguagem de programação padrão do banco de dados Oracle desde a versão 6.0 do produto, lançada em 1991. Ela é altamente integrada ao banco de dados e aos comandos SQL o que facilita o desenvolvimento de módulos estritamentevoltados para a manipulação de dados. Muitos podem argumentar que isso pode ser feito pelo SQL, mas a intenção de criar uma linguagem de programação que estendesse esse padrão e permitisse utilizar estruturas condicionais e de repetição ampliaram a utilização do banco de dados. Ao invés de enviar diversas requisições ao banco de dados e trabalhar cada uma das linhas no front-end, as aplicações podem simplesmente requisitar ao banco de dados que retorne a informação já trabalhada.

Significativos avanços foram feitos a partir da versão 2.3 do PL/SQL (que foi lançada com a versão 7.3 do banco de dados). A partir da versão 8.0 do banco de dados foi iniciado o suporte à orientação a objetos, processo que atingiu um alto nível de aderência a este padrão na versão 10g. Na versão 8.1 (ou 8i) a empresa começou a adotar cada vez mais os padrões do SQL e isso acabou refletindo também no PL/SQL. O Java passou a ser utilizado no banco de dados e apareceu (inicialmente) como concorrente do PL/SQL. Na versão 9i é ampliado o suporte a caracteres internacionais, herança entre objetos, compilação nativa do código PL/SQL em C e acesso a documentos XML.

Muito já se ouviu falar que o PL/SQL estaria cedendo lugar ao Java. Esta sim seria a linguagem de programação oficial do banco de dados Oracle em breve. Contudo, apesar do PL/SQL ser uma linguagem criada para ser procedural, a Oracle tem investido muito para deixá-la com um formato orientado a objeto. Novos pacotes têm sido agregados ao PL/SQL o que permite resolver cada vez mais problemas com o uso da linguagem. Este artigo não pretende sequer iniciar a discussão Java x PL/SQL e sim mostrar o que a Oracle fez nas mais recentes versões da linguagem.

Devido a grande parte das implementações do banco de dados Oracle estar em versões anteriores a atual (10gR2), vou focar este artigo nas principais modificações implementadas pela Oracle na versão 10gR1 e R2. Como o leitor verá, não é uma lista extensa, mas poderá auxiliá-lo em algumas situações do dia-a-dia.

Devo esclarecer que vou me restringir às mudanças relacionadas ao PL/SQL e não à linguagem SQL. Muitas das modificações do SQL acabam tendo reflexo no PL/SQL, mas nem por isso serão citadas neste artigo.

 

Desempenho

 

Com a nova versão do banco de dados, os usuários podem esperar um desempenho pelo menos duas vezes mais rápido do que a versão 9i e três vezes mais rápido que na versão 8i. Note que desde a versão anterior já havia a possibilidade de utilizar a compilação nativa onde o código é convertido para C durante a compilação. Com isso, a execução dos módulos PL/SQL chega a ser 30% mais rápida do que quando o código é interpretado.

Boa parte do interpretador foi reescrita na versão 10g. Com isso, foram otimizados diversos recursos da linguagem. Cálculos desnecessários foram eliminados e tornou-se possível determinar quando duas expressões são semelhantes (ou utilizam o mesmo caminho) ainda que não estejam escritas da mesma forma.

Um novo parâmetro (PLSQL_OPTIMIZE_LEVEL) foi criado para que o usuário escolha o comportamento do compilador. Pode assumir valores de zero, um ou dois (0, 1 ou 2), sendo que zero (0) é o mesmo que deixar como era antes da versão 10g e dois (2) otimizar ao máximo a compilação com natural queda no desempenho durante este processo (compilações mais longas).

 

Tipos de dados

 

Baseado no padrão definido na IEEE 754, a Oracle acrescentou dois novos tipos de dados no PL/SQL 10g: BINARY_ FLOAT e BINARY_DOUBLE. Com isso, as operações que envolvem dados numéricos armazenados em ponto flutuante ocuparão menos espaço e serão executadas mais rapidamente do que se o fosse utilizado o NUMBER (Listagem 1).

Funções numéricas como ABS, CEIL e ACOS, e de agregação, como AVG, MIN e MAX, podem manipular estes novos tipos de dados. No 10gR2, o PLS_INTEGER, que continua sendo a melhor opção para trabalhar com números inteiros, teve o limite aumentado para o intervalo entre -2147483648 e 2147483647.

 

 

Listagem 1. Utilização dos novos tipos de dados: BINARY_FLOAT e BINARY_DOUBLE.

 

declare

   pf32 binary_float;

   pf64 binary_double;

begin

   pf32:= 1.778827456e37;" [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados