Apostila SQL Plus
Apostila SQL Plus
Introdução
preciso e consistente.
Conceito Descrição
Table Estrutura básica de armazenamento de um RDBMS, consistindo
(Tabela) em uma ou mais colunas e zero ou mais linhas.
Row É uma combinação de valores de colunas em uma tabela.
(Linha)
Column Representa um tipo de dado em uma tabela.
(Coluna)
Field É a intersecção de uma linha com uma coluna. O campo pode
(Campo) conter dado, caso não tenha não tenha dizemos que é null (nulo).
Primary Key É a coluna ou o conjunto de colunas que identificam uma linha
(Chave Primária) como sendo única dentro de uma tabela.
Foreign Key É a coluna ou o conjunto de colunas que faz referência a chave
(Chave Estrangeira) primária na mesma ou em outra tabela. É usado para reforçar as
regras do Banco de Dados Relacional.
x Foreign Key deve ter seu valor coincidido com a da primary key (da tabela
regra lógica e não ponteiros físicos;
Objeto Descrição
Table Unidade básica de armazenamento composta por colunas e linhas
View Representação lógica de conjuntos de dados de ma ou mais tabelas
Sequence Gerador de chaves primárias (primary key)
Index Implementa performance a consultas (queries)
Program Unit Procedure, function, ou package de instruções agrupadas de SQL e
PL/SQL.
x Uma tabela é composta por colunas e linhas;
Propriedades da tabela:
Estágio Ação
Estratégia e Análise Analisa necessidade do Negócio. Constrói modelo do sistema.
Projeto Definir a partir do modelo o Banco de Dados.
Construção e Desenvolvimento e teste do software. Documentação para
Documentação usuário, ajuda de telas e manual de operação.
Transição Fase de testes de usuários, auditoria.
Produção Entrada efetiva do sistema em operação.
x Discoverer 2000
Alguns produtos:
x Designer 2000
Ferramenta gerencial
x Developer 2000
Ferramenta de análise
Ferramenta de desenvolvimento
x Fácil utilização;
x Linguagem não procedural;
Obs: sendo que o comando foi executado dentro do subdiretório onde o arquivo
executável estava, porém normalmente este local é acrescentado ao PATH do S.O. (Sistema
Operacional) durante a instalação do Oracle.
1.3.4. Ambiente Gráfico
Com um double-click no seu ícone. Este será nosso ambiente de estudo.
Logo após a sua chamada aparece a tela de logon, na qual deverá ser entrada as
informações:
User Name: nome do usuário cadastrado no Banco de Dados a ser referenciado;
Password: a senha do usuário indicado;
Host String: é o nome da string de conexão, ou seja o nome (alias) do Banco de
Dados. Para entendimento verificar o aplicativo SQL*Net Easy Configuration.
OBS:
1. .os comandos SQL podem estar em uma ou mais linhas, bastando para abrir
uma nova linha no mesmo comando pressionar [enter];
2. .as cláusulas, por facilidade de visualização, são comumente
separadas em diferentes linhas;
3. .TAB e indentações não afetam o comando;
4. .palavras chaves e comandos são comumente colocados em caixa
alta, e o restante em caixa baixa;
5. .comandos SQL não são case sensitive (caixa alta e baixa);
6. .quando um comando SQL usar mais de uma linha, estas estarão
sendo enumeradas. Isto ocorre devido ao buffer do SQL que armazena o
comando SQL;
7. . somente um comando por vez pode ser armazenado no SQL buffer,
e este pode ser executado de uma das seguintes formas:
-finalizando com “;” (ponto e vírgula);
-finalizando com “/” (barra inclinada);
-colocando “/” em nova linha de prompt;
-executando o comando RUN do SQL*Plus.
Ao digitarmos um comando na linha de prompt (SQL>), a ferramenta identifica este
comando e verifica se se trata de um comando SQL. Em caso afirmativo, coloca-o numa
área de memória chamada SQL Buffer (ver Figura 1.1).
Quando terminamos a digitação, esta área de memória, que só pode conter 1(um)
comando de SQL, é transmitida para o banco de dados. Quando o Banco de dados retorna o
resultado, o SQL*Plus recebe a informação, a formata e apresenta ao usuário.
1.4. Comando SQL*Plus
Linha de Prompt
SQL*PLUS
Usurário
LIST
Lista uma ou mais linhas do SQL buffer.
Sintaxe 1.01: L[IST] [n| n m| n*| n LAST| * | * n| * LAST| LAST]
Este comando tem a finalidade de listar uma ou mais linhas do SQL Buffer. A última
linha listada pelo comando se tornará a linha corrente.
Listagem 1.01: Digitando no SQL*Plus
SQL> select
2 'Teste'
3 from
4 dual
5 /
'TEST
-----
Teste
APPEND
Adiciona um texto especificado ao final da linha de comando armazenada no buffer
do SQL*Plus.
Sintaxe 1.02: A[PPEND] text
Com este comando, pode-se adicionar um trecho de texto ao final da linha corrente.
Sua Sintaxe é apresentada na Sintaxe 1.02.]
Observe, no exemplo da Listagem 1.03, que o texto é adicionado imediatamente após
o texto existente na linha corrente, mesmo havendo um branco entre o comando e o texto.
Observe, ainda, que após a execução do comando, o SQL*Plus apresenta a linha
modificada para verificação.
Listagem 1.03: Append
SQL> l
1 select
2 'Teste'
3 from
4* dual
SQL> l2
2* 'Teste'
SQL> A, 'OUTRO TESTE'
2* 'Teste', 'OUTRO TESTE'
SQL> /
'TEST 'OUTROTESTE
----- -----------
Teste OUTRO TESTE
Se desejarmos incluir um branco (ou mais) entre o texto antigo e o novo, devemos
digitar o comando Append, dois brancos (ou mais) e o texto a ser adicionado. Como teste
adicional, tente usar este comando para incluir um ponto-e-vírgula ao final de alguma linha.
Isto não é possível, uma vez que o ponto e virgula não faz parte da sintaxe do SQL e tem
uma conotação especial para o SQL*Plus, pois indica término de digitação e solicitação de
execução. Se, porém, o trecho que estivermos digitando não for de SQL e sim de PL/SQL,
teremos necessidade de incluir o ponto-e-vírgula no texto. Para que isto seja possível,
devemos repetir a ação realizada com o branco, ou seja, para a inclusão de um ponto-e-
vírgula ao final do texto, devemos digitar dois ponto-e-vírgulas seguidos.
CHANGE
Altera texto na linha contida no buffer.
Sintaxe 1.03: C[HANGE] sepchar old [ sepchar [ new [ sepchar] ] ]
Este comando de edição tem o objetivo de substituir parte do texto (ou todo) por
outro. O separador (<sepchar>) pode ser qualquer caractere especial que não esteja presente
no texto <old> nem no texto <new>.
Observe que os separadores apresentados são iguais. Pode-se utilizar qualquer
caractere especial não presente nos textos, porém, dentro de um comando, só podemos usar
um deles.
Listagem 1.04: Change
SQL> l
1 select
2 'Teste', 'OUTRO TESTE'
3 from
4* dual
SQL> l2
2* 'Teste', 'OUTRO TESTE'
SQL> c/Teste/TST
2* 'TST', 'OUTRO TESTE'
SQL> /
'TS 'OUTROTESTE
--- -----------
TST OUTRO TESTE
SQL>
Este comando efetua uma substituição por linha, isto é, a linha é analisada da
esquerda para a direita e, quando for encontrado um trecho de texto igual ao texto <old>, é
feita a substituição pelo texto <new> e o comando é encerrado. Se desejarmos repetir a
substituição para outro trecho da linha, devemos digitar o comando novamente.
DEL
Deleta uma ou mais linhas no buffer.
Sintaxe 1.04: DEL [n| n m| n*| n LAST| * | * n| * LAST| LAST]
Onde:
n Deleta linha n.
nm Deleta linha n até m.
n* Deleta linha n até a linha corrente.
n LAST Deleta linha n até a última linha.
* Deleta linha corrente.
* n Deleta a corrente linha até linha n.
* LAST Deleta todas as linhas.
LAST Deleta a última linha.
DEL exclui uma determinada linha da área do SQL Buffer. Caso não sejam
informados parâmetros que indiquem a linha a ser removida, será excluída a linha corrente.
INPUT
Adiciona uma ou mais linhas após a linha corrente no SQL buffer.
Sintaxe 1.05: I[NPUT] [text]
Este commando adiciona uma ou mais linhas após a linha corrente (no SQL Buffer).
Este comando difere do comando Append uma vez que pode voltar ao estado de digitação,
abrindo uma nova linha para digitação imediatamente após a linha corrente.
Quando digitamos o comando juntamente com um texto, cria-se uma nova linha
imediatamente após a linha corrente, sendo seu conteúdo o texto informado. Quando
digitamos apenas o comando, o SQL*Plus volta ao estado de digitação, apresentando uma
linha vazia com a numeração á esquerda à da linha corrente, anexada da letra i (ver
exemplo da Listagem 1.06).
Listagem 1.06: Input
SQL> l
1 select
2 from
3* dual
SQL> l1
1* select
SQL> i
2i 'TESTE'
3i , 'OUTRO TESTE'
4i
SQL> L
1 select
2 'TESTE'
3 , 'OUTRO TESTE'
4 from
5* dual
SQL> /
'TEST 'OUTROTESTE
----- -----------
TESTE OUTRO TESTE
Observe que, ao listarmos o conteúdo do SQL Buffer novamente, as linhas já foram
renumeradas.
EDIT
Este Comando aciona um editor registrado no Windows e passa como parâmetro o
nome de um arquivo ou o texto presente no SQL Buffer, de acordo com o comando
executado. Quando omitimos o nome do arquivo a ser editado, o SQL*Plus aciona o editor
do sistema passando como parâmetro o texto do SQL Buffer.
Quando desejamos editar um determinado arquivo, seu nome pode ser informado
com ou sem a extensão. A extensão default é SQL.
O editor de texto default é o WordPad do Windos.
Sintaxe 1.06: ED[IT] [ file_name[.ext]]
O editor em uso pode ser obtido através de uma variável chamada _Editor. Para
sabermos seu valor, podemos digitar na linha de prompt DEFINE _EDITOR ou apenas
DEFINE. No primeiro caso, o SQL*Plus nos mostrará o valor apenas da variável solicitada.
No segundo caso, serão apresentadas todas as variáveis existentes até o momento.
Posteriormente, no item referente a outros comandos do SQL*Plus, veremos o que
são as variáveis de substituição (ou variáveis definidas pelo usuário) e como podemos criar
novas variáveis ou remove-las.
Listagem 1.07: Variáveis de substituição do SQL*Plus
SQL> DEFINE
DEFINE SQL_PLUS_RELESE = “
O editor padrão no Windows é o bloco de notas (Notepad). Antes de substituirmos o
editor-padrão por outro de nossa escolha, devemos nos lembrar de que o editor escolhido
deve aceitar um parâmetro correspondente ao arquivo a ser editado. A Figura 2 apresenta a
execução do comando Edit sem que informemos o nome do arquivo.
Com esta modificação, qualquer arquivo a ser lido ou gravado pelo SQL*Plus o será
no novo diretório default. Se desejarmos efetuar a leitura ou gravação de arquivos em
outros diretórios, podemos incluir o caminho onde se encontra o arquivo ao usarmos o
comando EDIT.
/ (BARRA)
Executa o comando SQL ou bloco PL/Plus. Quando digitamos uma barra na linha de
prompt e em seguida teclamos Enter, o SQL*Plus envia o conteúdo do SQL Buffer para o
banco de dados, porém não apresenta o texto enviado, isto é , não lista o SQL Buffer. Esta é
a diferença entre o comando RUN e a barra.
Sintaxe 1.08: /(barra)
EXIT / QUIT
DESCRIBE
Este comando tem a finalidade de apresentar a definição de um objeto criado na
base de dados Oracle. O objeto pode ser uma tabela (table), visão (view), sinônimo
(synonym) especificado ou ainda as especificações de um procedimento (procedure),
função (function) ou pacote (package).
Observe que a Tabela Dual não pertence ao usuário DESENV e sim ao usuário SYS;
por este motivo, estamos informando o schema da tabela. Já a procedure Teste pertence ao
usuário DESENV e desta forma não é necessário que o schema seja fornecido.
SAVE
Salva o conteúdo do SQL Buffer em um arquivo do Sistema Operacional.
Sintaxe 1.11: SAV[E] file_name[.ext] [CRE[ATE] [REP[LACE] | APP[END]]
SQL>SAVE NOME
Cria o arq nome.sql
SQL>SAVE NOME REP
Gravou o arquivo nome.sql
REP é uma opção de REP[LACE] existem outras opções como CRE[ATE] para criar
o arquivo (se omitir é o default). Outra opção é o APP[END] para acrescentar no final do
arquivo já existente.
GET
Carrega o conteúdo de um arquivo especificado do S.O. dentro do SQL buffer.
Recupera um texto de um arquivo para o SQL Buffer. O arquivo só poderá ter um
comando.
Sintaxe 1.12: GET file_name[.ext] [LIS[T] | NOL[IST]]
SQL>Clear Buffer (limpa o buffer vigente)
SQL> Get Nome
1 Select count(*)
2 From FUNC
SQL> Get DUPLO
1 Select Sysdate From Dual
2 /
3* SELECT MAX(VL_SAL) FROM FUNC
SQL> /
/
*
ERROR line 2
ORA 00933: Comando SQL não encerrado adequadamente.
Caso o nome do arquivo seja composto das palavras List ou File, seu nome deve ser
mencionado entre aspas.
Caso não desejamos carregar o arquivo no SQL Buffer utilizamos a opção NOLIST.
START
Executa o conteúdo de um arquivo de comando existente no SO (especificado pelo
usuário) Cada comando de SQL ou SQL*Plus é lido e tratado individualmente. Num
arquivo executado por Start, podemos incluir diversos comandos de SQL.
Sintaxe 1.13: STA[RT] file_name[.ext] [arg ...]
ou
@ file_name[.ext] [arg...]
Executa o arquivo de comandos especificado.
Sintaxe 1.13.1: @file_name[.ext][arg..]
@@ file_name[.ext] [ arg..]
Executa um arquivo de comando aninhado. Quando existir comandos de execução
dentro do arquivo file_name a ser executado.
Sintaxe 1.13.2: @@file_name[.ext]
Foram usados dois parâmetros, um para a coluna Nr_git (numérica) e outro para a
coluna CD_depto (alfanumérica). O valor &1 indica que deve ser feita a substituição pelo
primeiro parâmetro passado na linha de comando. Como este valor é numérico, não houve
necessidade de ser informado entre aspas simples. O segundo parâmetro deveria ser
informado entre aspas simples, pois se tratava de uma string. No exemplo, utilizamos a
comparação com ‘&2’ no próprio comando SQL., de tal forma que o valor informado na
linha de comando não precisou de aspas.
Listagem 1.13: Start
SQL>@TESTE
Antigo 3: Where Nr_git > &1 and Cd_depto = ‘&2’
Novo 3: Where Nr_git > 16 and Cd_depto = Upper(‘D11’)
Variáveis de Substituição
As variáveis de substituição não precisam ser nomes numéricos, podemos dar
qualquer nome a elas; porem neste caso, não podem ser utilizadas como parâmetro para o
comando Start. Ao executarmos um comando de SQL ou de SQL*Plus contendo uma
referência a variável de substituição, o SQL * Plus solicita que o valor da variável seja
informado. Observe na Listagem 1.14 que, mesmo quando informamos os valores na linha
de comando, estes são ignorados e é feita a solicitação dos valores.
Listagem 1.14: Variáveis de Substituição
SQL> GET TESTE
1 Select Nm_func, Vl_sal, Cd_mat, Nr_git
2 FROM FUNC
3 * Where Nr_git > &Inst and Cd_depto = Upper(‘&DEP’)
SQL> @TESTE
Entre com o valor de Inst: 17
Entre com o valor de Dep: D11
Antigo 3: Where Nr_git > &Inst and Cd_depot = ‘&DEP’
Novo 3: Where Nr_git > 17 and Cd_depot = ‘D11’
COLUMN
Especifica o título que aparecerá em substituição ao nome de uma coluna. Formata
uma coluna ou uma expressão. Podemos executar esse comando sem coluna identificada
para que ele apresente a formatação existente em vigor no SQL*Plus. Se o executarmos
informando um nome de coluna ou expressão, ele apresentará a formatação em vigor para o
elemento especifico.
Cada uma das opções do comando afetará uma característica da coluna ou
expressão.
Onde:
ALI[AS] alias (Associa com um alias para a coluna que pode ser utilizado em
comando Break, Compare ou até mesmo em outro comando Column)
CLE[AR] (Desfaz os formatos especificados para a coluna)
FOLD_A[FTER] (Associa um carriage return depois (after) do cabeçalho e coluna
em cada linha.)
FOLD_B[BEFORE (Associa um carriage return antes (before) do cabeçalho e
coluna em cada linha.)
FOR[MAT] format (Determina um formato de adição para as colunas numéricas e
um tamanho para as demais colunas)
HEAD[ING] text (Determina o cabeçalho da coluna)
JUS[TIFY] {L[EFT] | C[ENTER] | R[IGHT]} (Justifica o alinhamento para o
cabeçalho da coluna).
LIKE {expr| alias} (Copia os atributos de outra coluna definida anteriormente)
NEWL[INE] (Quebra a linha antes de o valor ser apresentado)
NEW_V[ALUE] variable (atribui ao parâmetro <variável> o novo valor desta
coluna toda vez que houver mudança de valor.)
NOPRI[NT] | PRI[NT] (apresenta print ou noprint a coluna na listagem resultado.)
NUL[L] text (indica o <texto> a ser apresentado quando a coluna for nula.)
OLD_V[ALUE] variable (Atribui ao parâmetro <variável> o valor anterior desta
coluna toda vez que houver mudança de valor.)
ON OFF (Habilita ou desabilita os atributos de apresentação para a coluna.)
WRA[PPED] | WOR[D_WARAPPED] | TRU[NCATED] (Determina o controle de
quebra da coluna quando o conteúdo da coluna for maior que a largura especificada para
ela.)
Listagem 1.16: Comando Col
SQL> Select Nm_func, Vl_sal, Cd_mat, Nr_git
2 From Func
3 Where Cd_mat between 10 and 50;
NM_FUNC VL_SAL CD_MAT NR_GIT
------------ ---------- ---------- ----------
CRISTINA 5275 10 18
SANDRA 3825 30 20
JOAO 4017 50 16
SQL> Col Cd_depto HEA Depto for A5 (cinco casas decimais)
SQL> Col NM_Func HEA “Nome do | Funcionário” For A11 (quebra em duas
linhas cujo tamano será de 11 caracteres)
SQL> Col Vl_Sal HEA Salario For L999G990D00
SQL> Col Dt_Nasc HEA Nasc NoPrint
SQL> / (executará o comando agora com a nova formatação).
Nome do
Funcionári Salario CD_MAT NR_GIT
----------- --------------------- ---------- ----------
CRISTINA Cr$5.275,00 10 18
SANDRA Cr$3.825,00 30 20
JOAO Cr$4.017,00 50 16
REPFOOTER
Substitui e formata um rodapé para o final de cada relatório.
Sintaxe 1.17: REF[OOTER] [PAGE] [printspec [text | variable] ...] |
[OFF | ON]
REPHEADER
Substitui e formata um cabeçalho para o início de cada relatório.
Sintaxe 1.18: REPH[EADER] [PAGE] [printspec [text | variable] ...] |
[OFF | ON]
Onde:
COL n
S[KIP] [n]
TAB n
LE[FT]
CE[NTER]
R[IGHT]
BOLD
FORMAT text
TITLE
Substitui e formata um título para o início de cada página de relatório.
Sintaxe 1.19: TTI[TLE] [printspec [text | variable] ...] | [OFF | ON]
Onde:
COL n
S[KIP] [n]
TAB n
L[EFT]
CE[NTER]
R[IGHT]
BOLD
FORMAT text
BTITLE
Substitui e formata um texto especificado como título de rodapé (em cada página).
Sintaxe 1.20: BTI[TLE] [printspec [ text| vaiable]...] | [OFF | ON]
Listagem 1.18: Title
SQL> @TTITLE
BREAK
Especifica onde e de que forma a formatação será aplicada em um relatório (report)
ou listas de um BREAK definido. Define quais são os elementos de quebra e que ação deve
ser tomada quando ocorrer a mudança de valor (quebra) em cada um deles. Como este
comando não ordena os dados vindo do Banco, no comando Select devemos incluir a
clausula Order by com as mesmas colunas para as quais desejamos que o SQL * Plus avalie
a quebra.
Só podemos executar o comando break uma vez em cada sessão. Um segundo
comando desabilita o primeiro.
Sintaxe 1.21: BRE[AK] [ON report_element [action [action]]]...
Listagem 1.19: Break
BREAK ON CD_DEPTO SKIP 2 ON NR_CARGO DUP
SELECT CD_DEPTO, NR_CARGO, NM_FUNC
FROM FUNC
WHERE NR_CARGO IN (58, 60, 55)
AND ROWNUM < 9
ORDER BY CD_DEPTO, NR_CARGO
/
(RowNum é um pseudo coluna que corresponde a uma numeração seqüencial dada
para as linhas selecionadas pela restrição presente na cláusula Where. Neste caso estamos
solicitando apenas as 8 primeiras linhas a serem mostradas (que atendessem a restrição de
cargo), a restrição é feita antes da ordenação.)
COMPUTE
Calcula e imprime linhas de sumário. Efetua um cálculo em relação a um elemento
de quebra. Se desejarmos efetuar um cálculo quando houver quebra da coluna cd_depto,
esta coluna deve estar referenciada no comando Break. No final seria a palavra Report
deverá estar mencionada no comando Break e assim por diante. O cálculo é efetuado em
relação a um elemento presente do comando de quebra.
Sintaxe 1.22: COMP[UTE] [function [LAB[EL] text] ...
OF { expr| column| alias} ...
ON { expr| column| alias|REPORT|ROW} ...]
CLEAR
Apaga (Limpa) o valor de uma opção (definição) especificada.
Sintaxe 1.23: CL[EAR] option ...
Tipos de opção:
Breaks - limpa todas as indicações de quebras definidas no comando Break
Buffer - Limpa o texto do SQL Buffer.
Columns - Limpa todas as especificações definidas pelo comando Col
Screen - limpa a tela do SQL*Plus
SQL - Limpa o SQL Buffer
Timing - Limpa todos os controles de tempo definidos.
Listagem 1.20: Exemplo de Clear
SQL> CLEAR BREAKS COMPUTES
Breaks conteúdo removido
Computes conteúdo removido
SQL> CLEAR SQL BUFFER
SQL> CLEAR TIMI
SQL>
SPOOL
Armazena os resultados das consultas (queries) em um arquivo do Sistema
Operacional, e opcionalmente envia o arquivo para a impressora.
Sintaxe 1.24: SPO[OL] [file_name[.ext] | OFF | OUT]
A opção para arquivo default é LST no windows. Dependendo do SO esse valor
poderá variar.
OFF - interrompe a geração do Arquivo
OUT - Interrompe a geração do arquivo e o envia para a impressora default do
sistema.
Listagem 1.20: Exemplo de SPOOL
SQL> SPOOL TESTE.SQL
SQL> SELECT COUNT(*) FROM FUNC;
SQL> OUTROS COMANDOS….
SQL> SPOOL OFF (Fecha o Arquivo TESTE.SQL).
SHOW
Apresenta informações sobre o elemento especificado.
Mostra o valor de uma variável ou uma variável de ambiente SQL*Plus.
Sintaxe 1.25: SHO[W] option
DEFINE
Especifica uma variável de substituição e associa um valor alfanumérico a ela.
Quando este comando é executado sem parâmetros, o nome e valor de todas as variáveis de
substituição são apresentados. Quando informamos o nome de uma variável , apenas seu
valor é apresentado.
Sintaxe 1.26: DEF[INE] [ variable] | [ variable = text]
O valor desta variável permanece no sistema até que modifiquemos seu valor
através de outro comando Define, um comando Accept ou Col com
New_Value/Old_Value, ou ainda façamos a destruição de variável com o comando
Undefine ou encerremos o SQL*Plus.
Listagem 1.22: Define
SQL> define
DEFINE _SQL_RELEASE = ...
...
SQL> DEFINE DEP = D21
SQL> DEFINE DEP
DEFINE DEP = "D21" (CHAR)
SQL>SELECT NM_DEPTO
2 FROM DEPTO
3 WHERE CD_DEPTO = '&DEP';
antigo 3: WHERE CD_DEPTO = '&DEP'
novo 3: WHERE CD_DEPTO = 'D21'
NM_DEPTO
------------------------------------------------------
GERENCIA DE SISTEMAS ADMINISTRATIVOS
UNDEFINE
Deleta uma ou mais variáveis de substituição definidas pelo comando DEFINE.
Sintaxe 1.27: UNDEF[INE] variable ...
No exemplo da Listagem 1.23, após a destruição da variável "dep", a execução do
comando Select que faz referência a esta variável solicita ao usuário que forneça um valor
para "dep", pois esta variável não existe.
Listagem 1.23: Undefine
SQL>UNDEFINE DEP
SQL> SELECT NM_DEPTO
2 FROM DEPTO
3 WHERE CD_DEPTO = '&DEP';
Entre o valor ara dep: D11
antigo 3: WHERE CD_DEPTO = '&DEP'
novo 3: WHERE CD_DEPTO = 'D11'
NM_DEPTO
------------------------------------------------------
GERENCIA DE SISTEMAS ADMINISTRATIVOS
VARIABLE
Declara uma variável Bind que pode ser referenciada no PL/SQL.
PRINT
Este comando apresenta o valor de uma variável do tipo Bind ou de todas as
variáveis deste tipo declaradas (se for executado sem argumento).
Sintaxe 1.29: PRI[NT] [variable ...]
Os comandos deste tópico apresentam alguma mensagem para o usuário que está
executando scripts no SQL*Plus. Podem ser úteis para tornar a interface mais amigável.
ACCEPT
Lê uma linha de entrada e armazena estes dados de entrada em uma variável dada
(indicada) pelo usuário. Cria uma variável de substituição e , opcionalmente, formata uma
mensagem para o usuário.
Sintaxe 1.30: ACC[EPT] variable [NUM[BER] | CHAR | DATE] [FOR[MAT]
format] [DEF[AULT] default] [PROMPT text [NOPR[OMPT]] [HIDE]
Quando criamos a variável de substituição com este comando, ela pode ser de tipo
Number, Char ou Date, havendo crítica se o valor informado não for compatível com o tipo
definido. Os formatos válidos para uso são os mesmos do comando Col, e ainda são
suportadas os formatos SQL de data quando o tipo da variável for Date. Podemos informar
um valor default (para o caso de o usuário não formecer nenhum), apresentar uma
mensagem ou não e esconder o valor digitado pelo usuário (hide).
Listagem 1.25: Accept
SQL> ACCEPT MAT NUMBER FOR 999 DEFAULT 10 PROMPT -
> "INFORME O VALOR DA MATRICULA : "
INFORME O VALOR DA MATRICULA :
SQL> DEFINE MAT
DEFINE MAT = 10 (NUMBER)
SQL> ACCEPT DATA DATE FOR 'DD/MM/RRRR' DEFAULT '01/01/1998' -
> PROMPT "INFORME A DATA DE ADMISSÃO : "
INFORME A DATA DE ADMISSÃO :
SQL> DEFINE DATA
DEFINE DATA = "01/01/1998" (CHAR)
PROMPT
Envia uma mensagem especificada ou linha em branco na tela do usuário. Pode ser
útil para scripts longos, a fim de informar o passo executado.
Sintaxe 1.31: PROMPT [text]
PAUSE
Mostra uma linha em branco ou quando especificada, texto para efetuar paginação.
O SQL*Plus aguarda o usuário pressionar [return] para continuar.
Sintaxe 1.32: PAU[SE] [text]
A modificação das variáveis de sistema pode ser feita de duas formas: a primeira,
através do comando Set, onde podemos atribuir um valor para a variável desejada; a
segunda, através do menu Opções do SQL*Plus (Definir Opções). Neste caso, é
apresentado um diálogo que permite o acesso a cada variável de sistema com seu valor
atual e permite sua modificação. Este diálogo admite, também, a modificação da área
horizontal e tamanho total do buffer de tela.
SET
Este comando, que pode ser incluído em um script, modifica o valor de uma das
variáveis de sistema.
Sintaxe 1.33 - Set <variável> <valor> |
A Tabela 1.1 apresenta a lista de opções a serem configurados e descreve seus
respectivos significados no Sistema do SQL*Plus.
**** Ver Tabela de Configuração *****
Na Listagem 1.27 a seguir, testamos a variável de sistema Autotrace. Para que ela
possa realizar o relatório previsto, precisamos criar uma tabela em nosso schema chamada
Plan_Table. O script para criação desta tabela se acha no diretório
orawin95\rdbms80\admin\utlxplan.sql. A opção Traceonly do comando indica que o
comando de SQL não deve ser executado, apenas a apresentação do plano de acesso e as
estatísticas. Os dois relatórios produzidos aulixiam o DBA a detectar problemas na
performance de comandos de SQL DML.
Listagem 1.27: Exemplo Set Autotrace
SQL> @C:\ORACLE\ORA92\ADMIN\UTLXPLAN
Tabela criada.
Plano de Execução
----------------------------------------------------------------
Estatisticas
---------------------------------------------------------------
STORE
O comando Store gera um arquivo contendo todas as variáveis de sistema e seus
defaults para que possamos gerar um script com aquelas que desejamos alterar.
Quando o SQL*Plus começa a executar, ele procura por um arquivo de nome
Login.Sql e , caso encontre, executa os comandos existentes neste arquivo.
Desta forma, podemos criar um arquivo com este nome no diretório default do
SQL*Plus contendo atribuições a variáveis de sistema, títulos, formatação de colunas;
enfim, todos os padrões que quisermos estabelecer para nossa sessão. Toda vez que
iniciamrmos o SQL*Plus, este arquivo será executado automaticamente.
COMANDOS DIVERSOS
Neste item, veremos o restante dos comandos de SQL*Plus.
CONNECT
Conecta um usuário especificado ao ORACLE.
Sintaxe 1.35: CONN[ECT] [username[ /password] [@database_specification]]
DISCONNECT
Efetua COMMIT nas alterações pendentes no Banco de Dados e desloga o usuário
corrente, sem sair do SAL*Plus.
Sintaxe 1.36: DISC[ONNECT]
PASSWORD
O comando Password permite que o usuário do SQL*Plus modifique a password
(senha) de seu username no Oracle.
Sintaxe 1.37: PASSW[ORD] <username>
A Linguagem 1.31 apresenta exemplos de comando Password.
Listagem 1.31: Exemplo de Password
SQL> password
alterando sena para DESENV
Senha antiga: ******
Nova senha: ******
Redigite a nova senha: ******
Senha alterada
EXECUTE
Executa uma cláusula PL/SQL
Sintaxe 1.38: EXEC[UTE] statement
Listagem 1.32: Exemplo de Execute e Remark
SQL> REM TESTE
SQL> VARIABLE MAT NUMBER
SQL> EXECUTE :MAT := 10;
Procedimento PL/SQL concluído com sucesso.
HOST
Serve para enviarmos um comando para o sistema operacional onde o SQL*Plus
estiver executando. Executa um comando do S.O. sem sair do SQL*Plus.
Sintaxe 1.39: HO[ST] [conmmand]
REMARK
Para colocarmos comentários dentro de um arquivo de comandos (deve ser colocado
no início da linha). Inicia comentário em um arquivo de comandos.
Sintaxe 1.40: REM[ARK]
Ver em Listagem 1.32 um exemplo de Remark.
COPY
Copia os dados de uma consulta para uma tabela local ou contida em um Banco de
Dados remoto.
Sintaxe 1.41: COPY {FROM username[ /password]@database_specification|
TO username[ /password]@database_specification|
FROM username[ /password]@database_specification
TO username[ /password]@database_specification}
{APPEND | CREAT | INSERT| REPLACE} destination_table
[( column, column, column ...)] USING query
TIMING
Registra dados de tempo para um determinado intervalo. O parâmetro
<texto> corresponde ao nome do timer criado. Se executado sem parâmetros, lista
a quantidade de timers ativos. A opção Show mostra o valor acumulado para o
timer corrente e a opção Stop interrompe a contagem para o timer ativo.
Sintaxe 1.42: TIMI[NG] [STAR text | SHOW | STOP]
WHENEVER
OSERROR
Sai do SQL*Plus caso ocorra um erro de Sistema Operacional. Podemos ainda
fornecer uma informação para o Sistema Operacional. Este tipo de procedimento é
interessante quando colocamos a execução do SQL*Plus em um arquivo de
comandos do SO. O encerramento com um valor permite que o script tome uma ação
associada a cada valor reornado.
Sintaxe 1.43: WHENEVER OSERROR {EXIT [SUCCESS | FAILURE | n |
variable]
[COMMIT | ROLLBACK] | CONTINUE [COMMIT | ROLLBACK |
NONE]}
WHENEVER
SQLERROR
Sai do SQL*Plus caso ocorra um erro de SQL ou PL/SQL. Idem.
Sintaxe 1.44: WHENEVER SQLERROR {EXIT [SUCCESS | FAILURE |
WARNING | n | variable]
[COMMIT | ROLLBACK | CONTINUE [COMMIT | ROLLBACK |
NONE]}
ATTRIBUTE
Este comando especifica atributos de apresentação (display) para um determinado
atributo de uma coluna Object Type.
Sintaxe 1.45: ATTRIBUTE <tipo> <atribuidor> { Alias <alias> | Clear | Format
<formatação> | Like <tipo> <atrib> / Alias | ON | OFF }
Os formatos válidos são os mesmos do comando Column.
HELP
Acessa o sistema de help do SQL*Plus. Este comando aciona o mecanismo de Help
do SQL*Plus mostrando o manual com a sintaxe desejada. Para que a sintaxe seja
apresentada o DBA deverá instalar os textos de Help executando o arquivo helpbld.sql
presente no diretório <Oracle_Home>\sqlplus\admin\help.
Sintaxe 1.45: HELP[topic]
SQLPLUS
Inicia o SQL*Plus a partir da linha de comando do Sistema Operacional
Sintaxe 1.46: SQLPLUS [[-S[ILENT]] [logon] [start]] | -?
RUNFORM
Chama SQL*Forms a partir do SQL*Plus
Sintaxe 1.47: RUNFORM [options] foprm_name
2. CRIAÇÃO DA BASE RELACIONAL
PrjAtv
Ativ Cd_Proj: SMALLINT
Cd_Ativ: NUMBER(3) Cd_Ativ: NUMBER(3)
Nm_Sigla: VARCHAR2(12) Dt_Ini: DATE
Tx_Descricao: VARCHAR2(30) Dt_Fim: DATE
A tabela Funcionário (Func) tem como chave primária (PK) a coluna ced_mat e
como chave estrangeira (FK) a coluna cd_depto, que estabelece o relacionamento com a
tabela Departamento (Depto).
A Tabela Departamento (Depto) tem como chave primária (PK) a coluna Cd_Depto
e como chave estrangeira (FK) a coluna Cd_Resp, que estabelece o relacionamento com a
tabela Func, e a coluna Cd_Depto_Ctb, que estabelece um auto-relacionamento.
A Tabela Projeto (Proj) tem como chave primária (PK) a coluna Cd_Proj e como
chave estrangeira (FK) a coluna Cd_Resp, que estabelece o relacionamento com a Tabela
Func, e a coluna Cd_Depto, que estabelece o relacionamento com a Tabela Depto.
A Tabela Atividades (Ativ) tem como chave primária (PK) a coluna Cd_Ativ e não
possui relacionamentos com outras tabelas.
Finalmente, a Tabela Projeto-Atividades (PrjAtv) tem como chave primária (PK) as
colunas Cd_Proj e Cd_Ativ, que simultaneamente agem como Chaves Estrangeiras (FK) e
estabelecem relacionamento com as tabelas Proj e Ativ, respectivamente.
2.2. GERANDO AS BASES DE DADOS
A seguir será apresentado um conjunto de arquivos contendo as etapas necessárias
para a criação da base de dados a ser usada nos exercícios que utilizaremos em sala de aula.
Os comandos podem ser criados em um único arquivo ou em arquivos separados, como
está apresentado a seguir. A ordem de execução, no entanto, deve ser respeitada.
Todos arquivos devem ser criados em um mesmo diretório. Escolhemos defini-los
no diretório SQL criado na raiz do drive C, ou seja C:\SQL.
Listagem 2.04 – Arquivo L02_04.sql
DROP TABLE PRJATV CASCATE CONTRAINT;
DROP TABLE ATIV CASCATE CONTRAINT;
DROP TABLE PROJ CASCATE CONTRAINT;
DROP TABLE FUNC CASCATE CONTRAINT;
DROP TABLE DEPTO CASCATE CONTRAINT;
DROP TABLE HST_PROMO;
ALTER SESSION SET NLS_DATE_FORMAT = ‘DDMMYYYY’;
Neste primeiro script todas as tabelas serão removidas, o que permite que re-
executemos as mesmas operações diversas e façamos a implementação do modelo
novamente; portanto, não se espante se a primeira vez que você executá-lo cada um dos
comandos DROP apresente a mensagem de erro ERRO na linha 1: ORA-00942: a tabela ou
view não existe.
Na Listagem 2.10, criou-se uma tabela que não se acha presente no modelo. Ela tem
as colunas Cd_Mat e Cd_Depto mas não estabelece relacionamento com as tabelas Func e
Depto. Essa tabela tem a finalidade de armazenar informações históricas da empresa que
podem não mais estar cadastradas nas tabelas diárias. Usaremos suas informações para teste
de tabelas particionadas.
Observe que ela possui uma cláusula Partition By Range, indicando que,
fisicamente, esta tabela está subdividida em quatro partes e que, logicamente, se trata de
uma única tabela. O Oracle é responsável por adicionar ou pesquisar as informações na
partição correta.