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.

Imagem

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

SQL*Plus – Dicas e Truques

 

O SQL*Plus é o aplicativo padrão para acesso e manipulação de um banco de dados Oracle. Nesse artigo conheceremos um pouco mais desse software e veremos algumas dicas úteis para o seu uso.

 

O Oracle utilizado neste artigo é o Personal 8i (8.1.5) para Windows. Os comandos apresentados também se aplicam as distribuições do Oracle para outros sistemas operacionais.

 

Executando o aplicativo

O SQL*Plus é um utilitário de linha de comando; para executá-lo, digite sqlplus usuario@alias/senha no prompt do sistema. O parâmetro @alias se refere ao alias criado no SQL*Net (no Oracle Personal ele não é necessário). Se o parâmetro usuario@alias/senha não for informado, o SQL*Plus solicitará as informações de login antes de iniciar.

O Oracle também disponibiliza uma interface visual para o SQL*Plus, escrita em Java, que pode ser acessada através do menu [programas]\Oracle\Application Development\SQL Plus (esse caminho pode variar de acordo com a versão do Oracle). No prompt, essa interface é acessada pelo comando sqlplusw. Vide a figura 1.

 Imagem

Figura 1. Prompt SQL*Plus.

Executando comandos

A execução de comandos SQL é feita diretamente no prompt do SQL*Plus. O comando pode ser escrito em várias linhas e deve ser finalizado por ponto-e-vírgula. Stored procedures, triggers ou blocos de código PL/SQL devem ser finalizados pelo caracter /.

O último comando executado é sempre armazenado num buffer, que pode ser manipulado através de comandos específicos (vide tabela 1). O buffer só armazena um comando por vez.

Como exemplo de uso do buffer, efetue os seguintes procedimentos:

 

1.      Conecte no SQL*Plus com o usuário SCOTT (senha TIGER);

2.      Execute o comando SELECT * FROM EMP;

3.      Digite L . O resultado é o conteúdo do buffer; o caracter * indica a linha ativa para edição;

4.      Para adicionar a cláusula order by ename ao buffer digite A ORDER BY ENAME ou I ORDER BY ENAME e tecle . O comando alterado é exibido na tela. Para executá-lo, digite / e tecle .

5.      Para alterar a coluna do order by para JOB digite C /ENAME/JOB . Se a string a ser substituída não estiver na linha ativa, a mensagem SP2-0023: Cadeia não encontrada será exibida. Neste caso, a linha que contém a substring deve ser selecionada com o comando L número_da_linha .

 

O SQL*Plus também permite a execução de comandos armazenados em um arquivo. Para isso, digite START nome_do_arquivo ou simplesmente @ nome_do_arquivo.

 

Tabela 1. Comandos para manipulação do buffer.

Comandos para manipulação do buffer (os caracteres entre colchetes são opcionais na digitação)

L[IST]

Lista o conteúdo do buffer

L[IST] n

Lista o conteúdo da linha n do buffer e faz dessa a linha corrente

L[IST] *

Lista a linha corrente

L[IST] m n

Lista o conteúdo do buffer entre a linha m e n

A[ppend] texto

Adiciona texto ao final da linha corrente

I[NPUT] texto

Adiciona texto ao final do buffer, criando novas linhas

C[HANGE] /texto

Apaga texto da linha corrente

C[HANGE] /texto1/texto2

Troca texto1 por texto2 na linha corrente

DEL

Apaga a linha corrente

GET nome_do_arquivo

Insere no buffer o conteúdo do arquivo indicado

SAVE nome_do_arquivo

Salva o conteúdo do buffer no arquivo indicado

CLEAR BUFFER

Apaga o conteúdo do buffer

EDIT

Copia o conteúdo do buffer para o bloco de notas (o editor é automaticamente aberto)

 

Configurações de Ambiente

O SQL*Plus disponibiliza uma série de variáveis que permitem personalizar o ambiente de trabalho. Essas variáveis podem ser configuradas através do menu Opções\Definir Opções ou dos comandos SET/SHOW:

 

SET variável novo_valor -> altera o valor da variável indicada;

SHOW variável -> exibe o valor atual da variável.

 

A configuração das variáveis pode ser gravada num arquivo através do comando STORE SET nome_do_arquivo. Para fazer o processo inverso utilize START nome_do_arquivo ou @ nome_do_arquivo.

A tabela 2 mostra a definição de algumas variáveis de ambiente.

 

 

 

Tabela 2. Opções de configuração de ambiente.

 

Parâmetros

Descrição

AUTO[COMMIT] {OFF|ON|IMM[EDIATE]|N}

Configura a execução do commit de acordo com as opções:

 

ON/IMMEDIATE: o commit passa a ser automático a cada instrução INSERT, DELETE e UPDATE.

 

N: habilita a execução automática do commit a cada n instruções executadas.

 

OFF: o commit deve ser explícito (valor default).

ECHO {OFF|ON}

Habilita/Desabilita a exibição dos comandos de um arquivo de script no momento de sua execução. O valor default é OFF.

HEA[DING] {OFF|ON}

Habilita/Desabilita a exibição do nome das colunas no resultado de um SELECT.

LIN[ESIZE] {80|n}

Controla o número de caracteres a serem exibidos por linha. O valor default é 80.

NUMF[ORMAT] formato

Permite formatar a exibição de valores numéricos.

PAGES[IZE] {24|n}

Configura o número de linhas de uma página. Quando uma nova página é iniciada, o cabeçalho das colunas é reexibido.

SQLP[ROMPT] {SQL>|text}

Permite alterar a composição do prompt. O valor default é SQL>.

 

Gravando o resultado em arquivo

O SQL*Plus possui um recurso de spool que, uma vez ativo, grava todos os comandos e resultados num arquivo texto. Para ativar o spool utilize:

>spool  nome_do_arquivo

 

Após esse comando o SQL*Plus passa a gravar todos os comandos e resultados em memória. Para finalizar a gravação e efetivar a escrita no arquivo passado como parâmetro, execute o comando:

>spool off

 

O comando a seguir efetiva a gravação no arquivo e também imprime o resultado:

>spool out

 

Após a gravação no arquivo o recurso de spool é automaticamente desativado. Para reiniciá-lo,  execute novamente o comando spool nome_do_arquivo.

 

Auto execução

Através do arquivo glogin.sql é possível configurar comandos que serão executados automaticamente após o login no SQL*Plus. Ele é instalado na pasta OracleHome\sqlplus\admin\ e pode ser utilizado, por exemplo, para personalizar o ambiente do SQL*Plus.

 

Listagem 1

 

1.      set echo off

2.      set termout off

 

3.      define vUsuario=Não Conectado

4.      define vBanco=SQL*Plus

5.      define vSaudacao=''

 

6.      Column cUsuario New_Value vUsuario

7.      Column cBanco New_Value vBanco

8.      Column cSaudacao New_Value vSaudacao

 

9.      SELECT 'Bom Dia' cSaudacao FROM Dual WHERE

10.  ((SYSDATE >= TO_DATE(TO_CHAR(SYSDATE,'DD\MM\YYYY') ||

11.  ' 00:00:00','DD\MM\YYYY HH24\MI\SS')) AND

12.  (SYSDATE < TO_DATE(TO_CHAR(SYSDATE,'DD\MM\YYYY') ||

13.  ' 12:00:00','DD\MM\YYYY HH24\MI\SS')))

14.  UNION

15.  SELECT 'Boa Tarde' cSaudacao FROM Dual WHERE

16.  ((SYSDATE >= TO_DATE(TO_CHAR(SYSDATE,'DD\MM\YYYY') ||

17.  ' 12:00:00','DD\MM\YYYY HH24\MI\SS')) AND

18.  (SYSDATE < TO_DATE(TO_CHAR(SYSDATE,'DD\MM\YYYY') ||

19.  ' 18:00:00','DD\MM\YYYY HH24\MI\SS')))

20.  UNION

21.  SELECT 'Boa Noite' cSaudacao FROM Dual WHERE

22.  ((SYSDATE >= TO_DATE(TO_CHAR(SYSDATE,'DD\MM\YYYY') ||

23.  ' 18:00:00','DD\MM\YYYY HH24\MI\SS')) AND

24.  (SYSDATE < TO_DATE(TO_CHAR(SYSDATE,'DD\MM\YYYY') ||

25.  ' 00:00:00','DD\MM\YYYY HH24\MI\SS')));

 

26.  SELECT USER cUsuario FROM DUAL;

 

27.  SELECT UPPER(INSTANCE_NAME) cBanco FROM v$INSTANCE;

 

28.  set termout on

 

29.  prompt &vSaudacao, você está conectado na base &vBanco;

 

30.  set sqlprompt '&vUsuario@&vBanco> '

31.  set linesize 1000

 

32.  set termout off

33.  set termout on

 

Como exemplo vamos criar um script que, logo após o login, exibe uma saudação ao usuário e modifica o prompt do SQL*Plus. Para isso, adicione o conteúdo da listagem 1 no final do arquivo glogin.sql. Veja alguns comentários sobre o código:

 

-         A linha 1 desabilita a exibição dos comandos executados;

-         A linha 2 desabilita a exibição do resultado gerado pelos comandos utilizados;

-         As linhas 3, 4 e 5 declaram variáveis que serão utilizadas no código;

-         As linhas 6, 7 e 8 especificam que as variáveis vUsuario, vBanco e vSaudacao serão ponteiros para as colunas cUsuario, cBanco e cSaudacao.

-         As linhas 9 a 25 executam um SELECT que carrega a saudação na coluna cSaudacao;

-         A linha 26 executa um SELECT que carrega o nome do usuário conectado na coluna cUsuario;

-         A linha 27 executa um SELECT que carrega o nome da instância na coluna cBanco;

-         A linha 29 escreve uma mensagem na tela. Observe que as variáveis devem ser precedidas de ‘&’;

-         A linha 30 altera o prompt do SQL*Plus para usuário@instancia>

-         Veja o resultado na figura 2

 Imagem

Figura 2. Resultado da listagem 1.

 

Criando relatórios

O SQL*Plus disponibiliza comandos para geração de relatórios em tela, arquivo ou impressora. Esses comandos podem ser agrupados em arquivos .sql e posteriormente executados com a instrução @ nome_do_arquivo.sql.

 

Listagem 2

 

1.      set echo off

2.      set termout off

3.      set pagesize 10

4.      set linesize 80

 

5.      define vDataRelatorio=00/00/0000

6.      define vNomeUsu=SQL*Plus

 

7.      Column cDataRelatorio New_Value vDataRelatorio

8.      Column vNomeUsu New_Value vNomeUsu

 

9.      SELECT TO_CHAR(SYSDATE,'DD/MM/YYY HH:MI') cDataRelatorio, USER vNomeUsu FROM DUAL;

 

10.  CLEAR COLUMNS

11.  CLEAR SCREEN

 

12.  COLUMN EMPNO HEADING Matrícula

13.  COLUMN ENAME HEADING Empregado

14.  COLUMN JOB HEADING Cargo JUSTIFY RIGHT

15.  COLUMN SAL HEADING Salário FORMAT 99999.00

 

16.  REPHEADER PAGE LEFT 'Listagem de Empregados'

17.  REPFOOTER PAGE LEFT 'Relatório Impresso em &vDataRelatorio pelo usuário &vNomeUsu'

 

18.  set termout on

 

19.  spool c:\Relatorio.Txt

 

20.  SELECT EMPNO, ENAME, JOB, SAL FROM SCOTT.EMP;

 

21.  spool off

 

22.  set termout off

23.  set echo On

24.  set termout on

 

A listagem 2 mostra um exemplo de script que gera um relatório em tela e grava o resultado em um arquivo texto. O relatório exibido no SQL*Plus pode ser visualizado na figura 3.

 Imagem

Figura 3. Resultado da listagem 2.

 

Veja alguns comentários sobre o script:

 

-         A linha 3 define que cada página terá 10 linhas;

-         A linha 10 limpa qualquer definição que tenha sido feita para as colunas do relatório;

-         A linha 11 limpa a tela;

-         As linhas 12 a 15 formatam as colunas do relatório;

-         As linhas 16 e 17 formatam o cabeçalho e o rodapé do relatório;

-         A linha 19 habilita o spool para gravação do relatório em memória;

-         A linha 20 exibe o relatório na tela;

-         A linha 21 desativa o spool e efetiva a gravação do relatório no arquivo relatorio.txt.

 

Instalando o Help

O help do SQL*Plus é acessado através do comando help tópico, onde o tópico é o comando a ser consultado. Se o help do SQL*Plus não estiver instalado, execute os passos:

 

1.      Conecte no SQL*Plus como SYSTEM;

2.      Execute o script
@OracleHome\sqlplus\admin\help\helptbl.sql (o diretório pode variar). Após esse passo o SQL*Plus será encerrado automaticamente;

3.      O arquivo de help é plushelp.ctl (localizado no mesmo diretório do arquivo helptlb.sql). Ele deve ser importado com o utilitário SQL Loader - para isso, no prompt do sistema, execute o comando:

sqlldr direct=true userid=system/ control= plushelp.ctl log=pluslog bad=badlog

4.      Para finalizar a instalação efetue novamente a conexão com o usuário SYSTEM no SQL*Plus e execute o script helpindx.sql (localizado no mesmo diretório dos arquivos anteriores).

 

Conclusão

O SQL*Plus, apesar de ser uma interface puramente de linha de comando, é um aplicativo multiplatarforma que disponibiliza uma série de recursos para a interação com o servidor. Maiores detalhes sobre o seu uso podem ser obtidos na documentação do Oracle.