Os artigos dessa edição estão disponíveis somente através do formato HTML.
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
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
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á
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
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
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
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;
pf64:= 2.1416e118;
end;
/
Expressões regulares
Os fãs das expressões regulares agora podem aplicar este conhecimento para localizar padrões dentro do banco de dados Oracle.
Tendo alcançado muito sucesso em sistemas operacionais como Linux e Unix e
Há quatro tipos de expressões regulares no Oracle. Note que as funções não estão sendo exploradas em sua totalidade. Para maior detalhamento da sintaxe convém consultar os manuais do produto ou publicações específicas.
• REGEXP_REPLACE: busca e substitui um padrão.
É particularmente útil quando se quer localizar um Padrão e efetuar modificações na forma de visualização. Um bom exemplo é a formatação de telefone quando armazenado em formato texto. Como é possível armazená
Listagem 2. Exemplo de utilização da função REGEXP_REPLACE.
declare
telef1 varchar2(25):=’xx1112341234’;
telef2 varchar2(15):=’11.1234.1234’;
telef3 varchar2(15):=’1234.1234’;
begin
dbms_output.put_line( ‘Modifica =>’ ||
regexp_replace( telef1,
‘([=xx=]{2})([[:digit:]]{2})([[:digit:]]{4})
([[:digit:]]{4})’,‘(\1) \2
dbms_output.put_line( ‘Modifica =>’ ||
regexp_replace( telef1,
...