Artigo no estilo: Curso

Do que se trata o artigo

Este artigo demonstra de forma resumida as principais novidades das linguagens SQL e PL/SQL que surgiram na versão 11g do banco de dados voltadas principalmente para desenvolvedores, administradores ou operadores de dados que necessitam utilizar de forma eficiente os novos recursos do Oracle.


Em que situação o tema é útil

Conhecer as novidades introduzidas na versão 11g do principal banco de dados do mercado torna-se um diferencial a profissionais que desejam destaque e oportunidades no mercado de trabalho, além de uma reciclagem na preparação para provas de certificação na nova plataforma.

Resumo DevMan

O artigo destaca as novidades da linguagem SQL do Oracle 11g, a saber: facilidades do SQL*Plus, possibilidade de alterar um database link, versionar objetos do banco de dados, nova opção no comando audit, novas funções listagg() e nth_value(), cache de comandos SQL, extensões do comando select que facilitam o dia-a-dia, tabelas read only, índices invisíveis, colunas virtuais e muito mais. Já na linguagem PL/SQL, as novidades ficam por conta dos novos tipos de dados, novas packages, triggers compostas, facilidades na linguagem, ordenar a execução de triggers e a evolução do compilador.

Desde seu lançamento comercial em 1979, a cada nova versão do banco de dados Oracle, comunidades de DBAs e desenvolvedores do mundo todo ficam antenados para conhecer os novos recursos que facilitam as tarefas de planejar e manter aplicações em ambientes complexos com necessidades crescentes de performance, escala e segurança.

A primeira versão do Oracle 11g foi lançada em 2007 e atualmente está em sua release 2, comercializada nas edições Enterprise, Standard e Standard Edition One. Além das versões pagas, a Oracle possui também uma edição gratuita, conhecida como Oracle Express Edition, que se limita a utilizar 1 CPU, 1GB de memória RAM e tamanho máximo do banco de dados de 4GB.

Todas estas versões podem ser baixadas gratuitamente através do site download.oracle.com para a finalidade de desenvolvimento e teste de aplicações, conforme termos descritos na Oracle Technology Network Developer Licence Terms, cujo conteúdo pode ser acessado através do endereço listado na seção Links.

Neste artigo, vamos analisar as principais novidades da linguagem SQL e PL/SQL introduzidas nas versões 11g e 11gR2 do banco de dados Oracle, voltadas principalmente para desenvolvedores e operadores que necessitam dominar os novos recursos visando alcançar soluções eficientes, flexíveis e seguras.

Novidades na SQL

Antes de iniciarmos com as facilidades da linguagem SQL introduzidas na versão 11g, vale lembrar que agora a ferramenta SQL*Plus apenas será distribuída em uma versão de linha de comando. Tanto o iSQL*Plus quanto o SQL*Plus para Windows foram descontinuados a partir da versão 11g. O substituto, denominado Oracle SQL Developer, pode ser encontrado nas instalações do Oracle 11g, bem como está disponível para download no site da Oracle.

SQL*Plus

Mesmo com outra ferramenta de interação com o banco de dados em destaque na versão 11, a Oracle incluiu na ferramenta SQL*Plus os seguintes comandos:

SET EXITCOMMIT: que permite desativar o comportamento padrão do commit ao sair da ferramenta;

SET ESCCHAR: utilizado para definir um caractere especial (@, ?, &, %) a ser utilizado como parte do nome do arquivo ao executar arquivos de script ou gravar resultados via SPOOL;

SET ERRORLOGGING: grava os erros retornados por comandos SQL, PL/SQL ou SQL*Plus em uma tabela chamada SPERRORLOG, que é criada automaticamente no schema corrente.

Veremos a seguir alguns comandos SQL da versão 11g que trouxeram novos recursos ou mesmo facilitaram algumas rotinas no dia-a-dia.

Alter Database Link

Agora podemos alterar a senha de autenticação de um database link sem a necessidade de recriá-lo, como ocorria nas versões anteriores. A partir desta versão, podemos utilizar o comando alter database link informando as novas credenciais conforme o exemplo a seguir:


  SQL> ALTER DATABASE LINK bd11g CONNECT TO usuario IDENTIFIED BY novasenha; 

Create Edition

Objetos PL/SQL, views e synonyms agora podem ser versionados no banco de dados Oracle 11g através do recurso conhecido como Edition-Based Redefinition. Dessa forma podemos atualizar objetos de uma aplicação sem a necessidade de torná-la indisponível, alterando a estrutura de componentes como procedures, functions, packages ou views de um schema em uma área isolada conhecida como Edition, permitindo a realização de testes antes de tornar as modificações visíveis a todos os usuários do banco de dados.

Uma Edition corresponde a uma área rotulada que permite a criação ou modificação de objetos de um schema com visibilidade limitada a este espaço de trabalho. Além disso, é possível alternar entre as Editions existentes em um banco de dados Oracle que, por padrão, possui habilitado a Edition ORA$BASE. Na Listagem 1 veremos o uso deste recurso criando diferentes versões de uma mesma view em um mesmo schema do banco de dados.

Listagem 1. Exemplo do uso de Edition Based Redefinition.


  SQL> ALTER USER sqlmag ENABLE EDITIONS;
   
  Usuário alterado.
   
  SQL> CONNECT sqlmag/******
  Conectado.
  SQL> SELECT SYS_CONTEXT('userenv', 'current_edition_name') FROM DUAL;
   
  SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
  -----------------------------------------------------------------------------
  ORA$BASE
   
  SQL> CREATE EDITION teste_v1;
   
  Edição criada.
   
  SQL> CREATE EDITIONING VIEW v_cli AS SELECT codigo, nome FROM clientes;
   
  View criada.
   
  SQL> DESC v_cli
   Nome                                      Nulo?    Tipo
   ----------------------------------------- -------- --------------------------
   CODIGO                                             NUMBER
   NOME                                               VARCHAR2(50)
   
  SQL> ALTER SESSION SET EDITION=teste_v1;
   
  Sessão alterada.
   
  SQL> SELECT SYS_CONTEXT('userenv', 'current_edition_name') FROM DUAL;
   
  SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
  -----------------------------------------------------------------------------
  TESTE_V1
   
  SQL> CREATE OR REPLACE EDITIONING VIEW v_cli AS SELECT codigo, nome, telefone FROM clientes;
   
  View criada.
   
  SQL> desc v_cli
   Nome                                      Nulo?    Tipo
   ----------------------------------------- -------- --------------------------
   CODIGO                                             NUMBER
   NOME                                               VARCHAR2(50)
   TELEFONE                                           VARCHAR2(20)
   
  SQL> ALTER SESSION SET EDITION=ora$base;
   
  Sessão alterada.
   
  SQL> desc v_cli
   Nome                                      Nulo?    Tipo
   ----------------------------------------- -------- --------------------------
   CODIGO                                             NUMBER
   NOME                                               VARCHAR2(50)
   
  SQL> ALTER USER sqlmag ENABLE EDITIONS;
   
  Usuário alterado.
   
  SQL> CONNECT sqlmag/******
  Conectado.
  SQL> SELECT SYS_CONTEXT('userenv', 'current_edition_name') FROM DUAL;
   
  SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
  -----------------------------------------------------------------------------
  ORA$BASE
   
  SQL> CREATE EDITION teste_v1;
   
  Edição criada.
   
  SQL> CREATE EDITIONING VIEW v_cli AS SELECT codigo, nome FROM clientes;
   
  View criada.
   
  SQL> DESC v_cli
   Nome                                      Nulo?    Tipo
   ----------------------------------------- -------- --------------------------
   CODIGO                                             NUMBER
   NOME                                               VARCHAR2(50)
   
  SQL> ALTER SESSION SET EDITION=teste_v1;
   
  Sessão alterada.
   
  SQL> SELECT SYS_CONTEXT('userenv', 'current_edition_name') FROM DUAL;
   
  SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
  -----------------------------------------------------------------------------
  TESTE_V1
   
  SQL> CREATE OR REPLACE EDITIONING VIEW v_cli AS SELECT codigo, nome, telefone FROM clientes;
   
  View criada.
   
  SQL> desc v_cli
   Nome                                      Nulo?    Tipo
   ----------------------------------------- -------- --------------------------
   CODIGO                                             NUMBER
   NOME                                               VARCHAR2(50)
   TELEFONE                                           VARCHAR2(20)
   
  SQL> ALTER SESSION SET EDITION=ora$base;
   
  Sessão alterada.
   
  SQL> desc v_cli
   Nome                                      Nulo?    Tipo
   ----------------------------------------- -------- --------------------------
   CODIGO                                             NUMBER
   NOME
VARCHAR2(50)

Audit All Statements | In Session Current

A nova opção all statements do comando audit permite auditar todas as instruções executadas diretamente por determinado usuário, ignorando comandos emitidos por procedures ou functions PL/SQL. A outra novidade do comando audit está na cláusula in session current, que ativa a auditoria apenas para a conexão em andamento. Assim, quando o usuário abrir uma nova sessão com o banco de dados, nenhuma auditoria com esta opção estará ativa. Observe um exemplo na Listagem 2.

Listagem 2. Exemplo do comando audit in session current.

 ... 

Quer ler esse conteúdo completo? Tenha acesso completo