Thanks to visit codestin.com
Credit goes to pt.scribd.com

0% acharam este documento útil (0 voto)
2K visualizações43 páginas

Apostila SQL Plus

1) O documento discute os conceitos básicos de banco de dados relacional, incluindo tabelas, linhas, colunas, chaves primárias e estrangeiras. 2) Apresenta o SQL*Plus como uma ferramenta para acessar e manipular bancos de dados Oracle, permitindo usar SQL e PL/SQL. 3) Discutem características e objetos de bancos de dados relacionais como views, sequences, indexes e program units.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
2K visualizações43 páginas

Apostila SQL Plus

1) O documento discute os conceitos básicos de banco de dados relacional, incluindo tabelas, linhas, colunas, chaves primárias e estrangeiras. 2) Apresenta o SQL*Plus como uma ferramenta para acessar e manipular bancos de dados Oracle, permitindo usar SQL e PL/SQL. 3) Discutem características e objetos de bancos de dados relacionais como views, sequences, indexes e program units.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 43

1.

Introdução

1.1. Conceito de Banco de Dados Relacional


O princípio do modelo relacional foi definido pela primeira vez pelo Dr. E. F. Codd em
junho de 1970, através de um documento chamado “A Relational Model of Data for Large
Shared Data Banks”. Nesse documento o Dr. Codd propõe o modelo relacional para
Sistemas de Banco de Dados.
Os mais populares modelos usados até então se baseavam no Hierárquico e de Rede ou
simplesmente estruturas isoladas de arquivos. Sistemas de Administração de Banco de
Dados Relacionais – RDBMS – tornaram-se muito popular em pouco tempo devido a sua
facilidade e flexibilidade. Além disso, vários fornecedores de tecnologia de ponta, entre
elas a Oracle, investiram na tecnologia e acrescentaram uma gama de produtos com o
intuito de gerar ferramentas para o desenvolvimento de aplicações.

1.2. Conceito do Modelo Relacional

x Coleção de objetos ou relações armazenam dados;


x Conjunto de operadores podem agir nos relacionamentos para produzir outras

x Um banco de dados relacional deve garantir integridade de dados, além de ser


relações;

preciso e consistente.

1.2.1. Funções do Banco de Dados Relacional

x Administrar os dados armazenados;


x Controlar os acessos aos dados;
x Garantir recuperação e alteração dos dados;
1.2.2. Terminologia do Banco de Dados Relacional

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 Chave primária somente aceita valores não duplicados;


OBS:

x Primary Keys geralmente não são alteradas;


x Foreign Keys são baseadas nos valores do dado e assim existem apenas como uma

x Foreign Key deve ter seu valor coincidido com a da primary key (da tabela
regra lógica e não ponteiros físicos;

relacionada), ou então ser null.

1.2.3. Propriedades do Banco de Dados Relacional


Banco de dados é uma coleção de nomes de objetos únicos, tal como uma tabela.
Assim, não há necessidade de ser especificado o caminho físico bem como a sua disposição
física para acessá-la.
Para acessar um Banco de Dados é necessário executar um comando SQL (Structured
Query Language), a qual é a linguagem padrão de acesso a Bancos de Dados Relacionais
segundo a ANSI (American National Standards Institute).

1.2.4. Objetos do Banco de Dados

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:

x As intersecções de linhas e colunas são campos de valores;


x Cada linha pode ser identificada por uma chave primária, a qual não permite valores

x A ordem (seqüência) de linhas não é relevante ao Banco;


duplicados;

x Por default, os dados são armazenados na ordem como foram inseridos;


x Cada nome de coluna deve ser único na tabela;
x A ordem das colunas não é relevante quando se armazenam dados;
x Devem ser informadas as colunas que se deseja recuperar;
x Os valores dos campos devem ter tamanhos iguais ou menores do tamanho do
campo.

1.2.5. Integridade de Dados


Todas as regras de integridade devem ser declaradas, ou no database server (back-end) ou
na ferramenta de desenvolvimento (front-end).

Tipo de regra de Descrição


integridade
Entidade Chave primária não pode ser null e deve ser única
Referencial Chave estrangeira deve ter valores que coincidam com as da
chave primária ou serem null
Coluna Valores na coluna deve coincidir com tipo definido para ela
(datatype)
User-defined Validações definidas segundo regras de negócio (business
rules)

1.2.6. Ciclo de Desenvolvimento de Sistemas


Sistemática do tipo top-down permite que ao longo das suas etapas sejam verificadas todas
as necessidades para transformar necessidades de Informações de Negócio em um Sistema
de Informação.

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.

1.2.7. O que é Oracle


É uma empresa de Banco de Dados que oferece um conjunto de aplicações suficientes
para garantir completa solução em tecnologia de informação. As aplicações Oracle têm
como uma das principais características a sua portabilidade, oferecido para praticamente
qualquer plataforma e sistema operacional, desde computadores pessoais até servidores
multiprocessados.

x Discoverer 2000
Alguns produtos:

x Designer 2000
Ferramenta gerencial

x Developer 2000
Ferramenta de análise
Ferramenta de desenvolvimento

1.2.8. SQL, SQL*Plus e PL/SQL


Comandos SQL, SQL*Plus e PL/SQL são usados para acessar e manipular os dados
armazenados em um Banco de Dados Oracle.

1.2.9. Características do SQL

x Fácil utilização;
x Linguagem não procedural;

1.3. Introdução ao SQL*Plus

1.3.1. Introdução ao SQL*Plus


SQL*Plus é uma ferramenta da Oracle, a qual é comumente utilizada para
acessarmos e manipularmos um Banco de Dados Oracle.
O SQL*Plus permite usarmos a Linguagem SQL em conjunto com a sua extensão
procedural, o PL/SQL. A linguagem de Banco de Dados SQL nos permite armazenar e
recuperar dados no Banco de Dados Oracle, enquanto que o PL/SQL nos permite usar os
comandos SQL através de uma lógica procedural.

1.3.2. Acessando o SQL*Plus


Esta ferramenta está normalmente disponível em dois tipos de ambiente, caracter e
gráfico (ex:Windows 98).

1.3.3. Linha de Comando


c:\orawin95\bin>sqlplus.exe

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.

Na seqüência, temos a tela do SQL*Plus:

1.3.5. Escrevendo Comandos SQL


A digitação na linha do prompt pode ser contínua (uma única linha), ou pode ocupar
mais de uma linha, bastando que teclemos [Enter] para que seja mostrada uma numeração
seqüencial no lado esquerdo do vídeo, indicando que o SQL*Plus considerou continuação
do estado de digitação.

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

Banco de Dados ORACLE

Sql Buffer Características


do SQL*PLUS Resultado

Linha de Prompt
SQL*PLUS

Usurário

Figura 1.1: Esquema de Funcionamento do SQL*PLUS


No Esquema da Figura 1.1, observa-se que nem todos os comandos digitados são
colocados na área de Buffer para transmissão ao banco de dados. Isto ocorre porque o

x Editar o comando SQL armazenado no Buffer;


SQL*Plus possui também comandos próprios com a finalidade de:

x Formatar os resultados retornados pelo Banco de Dados;


x Armazenar os comandos de SQL para o disco e recupera-los para execução;
x Modificar o modo de trabalhar do SQL*Plus;
x Enviar mensagens e receber respostas de outros usuários;
x Listar a definição de qualquer tabela;
x Fazer acesso e copiar dados entre banco de dados.

1.4.1. Comandos de Edição do SQL*PLUS


Os comandos de edição têm o objetivo de modificar a informação armazenada no SQL
Buffer. Estes comandos afetam apenas uma linha de cada vez, isto é, a edição é feita linha a
linha.
Quando listamos o conteúdo do SQL Buffer, o SQL*Plus mostra do lado esquerdo do
texto (ao lado da numeração) um asterisco (*) em uma das linhas, indicando que se trata da
linha corrente, ou seja, da linha apta para modificação. Desta forma, qualquer comando de
edição que viermos a fazer afetará apenas a linha corrente.

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

Listagem: 1.02 – Listando o SQL Buffer

SQL> l2 //mostra a 2a linha do SQL Buffer


2* 'Teste'
SQL> l * 4 //mostra da linha vigente até a 4a Linha do SQL Buffer.
2 'Teste'
3 from
4* dual
SQL> l last
4* dual
SQL> l 1 * //mostra da 1a a última (*) linha do SQL Buffer
1 select
2 'Teste'
3 from
4* dual
SQL> l * //mostra a última linha do SQL Buffer
4* dual
SQL>
Na listagem 1.02, o comando List é usado em letra minúscula. Repita o exemplo
utilizando letra maiúscula: Você poderá observar que os comandos do SQL*Plus são case
sensitive, isto é, a informação pode ser fornecida em letra minúscula ou maiúscula
indiferentemente.
Repita o teste apresentado na Listagem 1.02 com outras opções sintáticas. Verifique se
ocorre alguma diferença na digitação dos comandos em letra maiúscula ou minúscula.

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.

Listagem 1.05: DEL


SQL> l
1 select
2 'TST', 'OUTRO TESTE'
3 from
4* dual
SQL> DEL 2
SQL> L
1 select
2 from
3* dual
SQL>

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.

Figura 1.2: Comando EDIT sem parâmetros


Observe a mensagem na linha imediatamente abaixo da linha de prompt. Nesta
situação, o SQL*Plus deveria passar como parâmetro para o editor o conteúdo do SQL
Buffer. O que ele faz, na verdade, é gravar um arquivo em disco (cujo nome default é
Afiedt.buf) e passar o nome deste arquivo como parâmetro para o editor.
Quando efetuamos as modificações desejadas, salvamos e fechamos o editor
(Notepad), o SQL*Plus refaz a leitura do arquivo Afiedt.buf carregando o texto modificado
para o SQL Buffer.
Observe na Figura 1.2 que o Notepad apresenta o texto seguido de uma barra. Essa
barra indica ao SQL*Plus que o comando está completo. Caso retiremos a barra do arquivo,
ao retornarmos para o SQL*Plus, ele apresentará uma linha vazia imediatamente após a
última linha lida para que continuemos a digitação. Experimente.
O diretório do Windows onde serão gravados (ou lidos) os arquivos de trabalho pode
ser controlado por nós (default é C:\<Oracle Home>\Bin). Se criarmos um atalho para o
SQL*Plus (o executável se encontra na pasta C:\<Oracle Home>\Bin e se chama
SQLPlus.exe), basta que modifiquemos o diretório “Iniciar em” da pasta Atalho (ver Figura
1.3), obtido ao pressionarmos o botão direito do mouse sobre o ícone do SQL*Plus e
escolhermos a opção Propriedade.
Podemos também modificar o diretório de trabalho do atalho apresente na pasta
Application Development da seguinte forma: clicar no botão iniciar (do Windows), opção
Configurações, opção Barra de Tarefas e menu Iniciar, pasta Avançado, clicar no botão
Avançado, expandir o nó Programas, pesquisar (subordinado à pasta Documents and
Settings) a pasta All Users e expandi-la, seguir expandindo seqüencialmente as pastas Menu
Iniciar, Programas e Oracle-OraHome9i. Finalmente clicar sobre a pasta Application
Development para que tenhamos acesso ao ícone de ferramentas. Neste ponto, pressionar o
botão direito do mouse sobre o ícone do SQL*Plus e escolher a opção Propriedades.
Novamente será mostrada a tela de propriedades e, na pasta Atalho, poderemos alterar o
diretório “Iniciar Em” (ver Figura 1.3). Para que a modificação tenha efeito, o SQL*Plus
deve ser reiniciado.

Figura 1.3: Propriedades do atalho SQL*Plus

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.

Comando de Execução e de Encerramento


Neste grupo de comandos, veremos como executar o conteúdo do SQL Buffer e como
fechar o SQL*Plus.
RUN
Este comando envia o conteúdo do SQL buffer para o banco de dados e, ao mesmo
tempo, apresenta no vídeo as linhas enviadas (lista o SQL Buffer).
Sintaxe 1.07: R[UN]
Para efeito de teste, digite o comando de SQL apresentado na listabem 1.08 e execute
o comando RUN.
Listagem 1.08: RUN
SQL> SELECT ‘TESTE’
2 FROM DUAL
3
SQL> RUN

/ (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

Os comandos EXIT e QUIT são equivalentes e têm a finalidade de encerrar a sessão


do SQL*Plus. Isto significa que a conexão com o banco de dados e, simultaneamente, o
próprio programa serão encerrados, e o controle é retornado ao Sistema Operacional.
De acordo com a Sintaxe 1.09, observamos que podemos determinar como deve ser
considerado o término do programa, isto é, com sucesso ou não e com efetivação ou não
das modificações realizadas no Banco de Dados.

Sintaxe 1.09: {EXIT | QUIT} [SUCCESS | FAILURE | WARNING |n| variable]


[COMMIT | ROLLBACK]
Quando digitamos apenas Quit (ou apenas Exit), ficam valendo as opções
sublinhadas. O término do programa é considerado normal e a conexão se encerra também
normalmente com COMMIT.
As demais opções indicam a ocorrência de uma falha na execução do SQL*Plus. Isto
pode ser útil quando executamos o SQL*Plus dentro de um arquivo de comandos para o
sistema operacional em que devemos determinar como foi o término do programa anterior,
para que o próximo comando do arquivo seja executado ou não.
Podemos informar um valor numérico fixo, o valor de uma variável de substituição
ou o valor de uma variável BIND (variável para troca de informações com um programa
PL/SQL será vista posteriormente).
A utilização destes parâmetros de encerramento é comum em arquivo de comandos.
Desta forma, podemos transferir o valor para o arquivo de comandos a fim de controlar a
execução do comando seguinte.
A conexão com o banco pode ser encerrada independentemente do tipo de término do
SQL*Plus (COMMIT ou ROLLBACK).
Na Figura 1.4 (a seguir), incluímos três janelas:
x A janela da esquerda apresenta um script chamado exsql.sh, contendo a
execução do SQL*Plus numa linha de comando recebendo como parâmetros o
user, passwor e o script a ser executado (@valor). Após a execução,
verificamos se o término foi normal ou não e adotamos caminhos alternativos.
Foi utilizado o parâmetro –s indicando que a janela do SQL*Plus não pode ser

x Na janela da direita, apresentamos o conteúdo deste script valor: ele encerra o


aberta, ou seja, indicando execução em batch.

x Na janela inferior, vemos a execução do script exsql.sh, no qual o término do


SQL*Plus com warning.

programa (SQL*Plus) foi anormal e recebemos as mensagens adequadas.

Figura 1.4: Execução do SQL*Plus em ambiente UNIX ou LINUX

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).

Sintaxe 1.10: DESC[RIBE] {[ user.] table[@ database_link_name] [column] |


[user.] object[. Subobject]}
A Sintaxe 1.10 indica que podemos obter informações de objetos pertencentes ao
usuário que estabeleceu a conexão, objetos de outros usuários (informando-se <schema>)
ou objetos existentes em outros bancos de dados (informando-se <database_link_name>).
Posteriormente, veremos o concito de schema e como criar um database_link.
No exemplo a seguir, estamos obtendo a descrição da tabela Dual e da rotina Proc.
Listagem 1.09: Describe
SQL>DESC SYS.DUAL

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.

Comandos Para Tratamento de Arquivos


O conjunto de comandos que passaremos a estudar neste item permitirá que
guardemos comandos de SQL em arquivos para a execução posterior.

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]

Listagem 1.12: Start


SQL> Select Nm_func, Vl_sal, Cd_mat, Nr_git
2 From FUNC
3 Where Nr_git > &1 and Cd_depto = ‘&2’
4
SQL> SAVE TESTE
Criado File TESTE
SQL> START TESTE 16 D11
antigo 3: Where Nr_git > &1 and Cd_depto = ‘&2’
novo 3: Where Nr_git > 16 and Cd_depto = ‘D11’

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’

Quando desejamos que o valor da variável de substituição seja concatenado com


outro valor, devemos usar um ponto (.) para separar o valor.
Listagem 1.15: 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 > &1 and Cd_depto = Upper(‘&2.11’)
SQL> @TESTE 17 D
Entre com o valor de 1: 17
Entre com o valor de 2: D11
Antigo 3: Where Nr_git > &1 and Cd_depto = ‘&2.11’
Novo 3: Where Nr_git > 17 and Cd_depto = ‘D11’
2.1.6.2 - Comandos de Formatação do SQL * Plus

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.

Sintaxe 1.16: COL[UMN] [{ column| expr] [option ...]]

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

Listagem 1.17: HeapHeader


SQL> SET LINESIZE 50
SQL> REPHEADER PAGE LEFT FORMAT 9 SQL.PNO -
¾ CENTER “RELATÓRIO DE TESTE “ -
¾ SKIP 2 CENTER “RELEASE “ FORMAT 999999999 SQL.RELEASE -
¾ SKIP 2 CENTER “Usuário “ SQL.USER
SQL>TTITLE RIGHT “Pág. “ format 990 sql.pno
SQL> repfooter page “Última página” -
¾ SKIP 2 LEFT “Do Relatório “
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO
2 FROM FUNC
3 WHERE ROWNUM < 5
4 /
SQL> REPHEADER OFF
SQL> TTITLE OFF
SQL> REPFOOTER OFF

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} ...]

Function Computes aplicadas aos respectivos tipos:


AVG Médias de valores não nulos
COU[NT] Conta total de qualquer tipo de valores não nulos
MAX[IMUN] Valor máximo de um NUMBER, CHAR, VARCHAR2(VARCHAR)
MIN[IMUN] Valor mínimo de um NUMBER, CHAR, VARCHAR2(VARCHAR)
NUM[BER] Conta as linhas
SUM Somatório de valores não nulos (NUMBER)
VAR[IANCE] Variância de valores não nulos (NUMBER)

Listagem 1.19:Script usando computer


COL CD_DEPTO FOR A5
BREAK ON CD_DEPTO SKIP 2 ON REPORT
COMPUTE SUM LABEL ‘SOMA’
AVG LABEL ‘MEDIA’ OF VL_SAL PROJECAO ON CD_DEPTO REPORT
SELECT CD_DEPTO, NM_FUNC, VL_SAL, VL_SAL* 1.1 PROJECAO
FROM FUNC
WHERE NR_CARGO IN (58, 60, 55)
AND CD_DEPTO IN (‘A00’, ‘C01’)
AND ROWNUM < 5
ORDER BY CD_DEPTO
/

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

Dentre os parâmetros do comando Show apresentados na sintaxe, temos alguns


ainda não utilizados nos comandos anteriores. São eles:
<variável> - Apenas informações sobre a variável de sistema nomeada no comando;
ALL - Apresenta informações sobre todas as variáveis de sistema
BTI[TLE]
ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY |
TRIGGER \ VIEW} [schema.] name] - Apresenta informações sobre os erros ocorridos em
uma compilação no último comando de PL/SQL ou sobre uma rotina especifica nomeada
no comando.
LABEL - Apresenta informações sobre os rotolos utilizados
LNO
Parametros - Apresenta informações sobre os parâmetros de inicialização do bando
de dados. É uma opção para uso por DBAs.
PNO
REL[EASE]
REPF[OOFETER]
REPH[EADER]
SPOO[L]
SGA - Apresenta a alocação de memória feita para o banco de dados. É uma opção
para uso por DBAs.
SQLCODE
TTI[TLE]
USER

Listagem 1.21: Teste de Show


SQL> SHOW BTITLE LNO PNO RELEASE SPOOL WRAP LINESIZE
REPFOOTER
btitle OFF e é representado pelos primeiros caracteres de próxima instrução
lno 4
pno 2
release 900010101
spool OFF
wrap: linhas serão passado para a linha seguinte
linesize 60
repfooter OFF e é NULL
SQL>

COMANDOS PARA CONTOLE DE VARIÁVEIS DE USUÁRIO


No SQL*Plus, podemos definir dois tipos de variáveis de usuário, as variáveis de
substituição (já utilizados em diversos scripts) e as variáveis Bind para interface com
rotinas de PL/SQL.

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.

Sintaxe 1.28: VAR[IABLE] [variable [NUMVER | CHAR | CHAR (n) | Nchar


|Nchar (n) | Nvarchar2 (n) | VARCHAR2 (n) | Clob | Nclob | REFCURSOR]]
Os tipos da variável criada correspondem aos tipos válidos em PL/SQL.
Quando utilizamos o coamando Variable sem parâmetros, são listadas todas as
variáveis Bind Criadas no SQL*Plus.
O exemplo da Listagem 1.24 cria duas variáveis Bind: uma do tipo Number e outra
de tipo Refcursor. O comando Begin inicia um trecho de programa PL/SQL
(que termina no End;). No momento do Open da variável cursor, o comando
Select é executado e as linhas que atendem à condição estabelecida são
selecionadas em uma área de trabalho endereçada pela variável cursor.

Listagem 1.24: Variable


SQL> VARIABLE MAT NUMBER
SQL> VARIABLE WCURSOR REFCURSOR
SQL> BEGIN
2 :MAT := 10;
3 OPEN :WCURSOR FOR SELECT NM_FUNC, VL_SAL
FROM FUNC
4 WHERE CD_MAT BETWEEN
:MAT AND :MAT +30;
5 END;
Procedimento PL/SQL concluído com sucesso.
SQL> PRINT mat wcursor
MAT
-------------
10
NM_FUNC VL_SAL
--------------------- ---------
CRISTINA 5275
MIGUEL 4125
SANDRA 3825

Quando executamos o comando Print, são apresentados os valores


da variável "mat" e da área apontada pela variável cursor "wcursor".

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 ...]

Comandos para Comunicação com o Usuário

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]

O exemplo da Listagem 1.26 mostra um script contendo os dois comandos e sua


execução.
Listagem 1.26 - Pause
SQL>START PAUSE
SQL>PAUSE "INÍCIO DA EXECUÇÃO"
"INÍCIO DA EXECUÇÃO"

SQL> SELECT NM_FUNC FROM FUNC


2 WHERE CD_MAT = 10;
NM_FUND
------------
CRISTINA

SQL> PROMPT "FIM DE EXECUÇÃO"


"FIM DE EXECUÇÃO"

Modificando Variáveis de Sistema

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.

SQL> SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS


SQL> SELECT * FROM FUNC
2 WHERE CD_MAT BETWEEN 100 AND 200;
11 linhas selecionadas.

Plano de Execução
----------------------------------------------------------------

Estatisticas
---------------------------------------------------------------

Na Listagem 1.28, testamos as variáveis Escape, SqlTerminator, SqlPrompt e Time.


A variável Escape pode ser muito útil quando desejamos incluir o & dentro de um texto
sem que ele tenha a função de variável de substituição.

Listagem 1.28: Exemplo de Set Escape, SqlTerminator e SqlPrompt


SQL> SET ESCAPE "!"
SQL> SET SQLTERMINATOR ?
SQL> SET SQLPROMPT "DINO> "
DINO> SET TIME ON
16:27:41 DINO> TTITLE LEFT "Empresa !& Cia"
16:27:41 DINO> SELECT CD_DEPTO, NM_DEPTO
16:27:41 2 FROM DEPTO
16:27:42 3 WHERE CD_DEPTO = 'A00'?

Empresa & Cia


CD_ NM_DEPTO
--- -------------------------------
A00 DIRETORIA DA EMPRESA

Na Listagem 1.29, foram testadas as variáveis Serveroutput e Linesize. Para a


variável Serveroutput, os formatos disponíveis são Wrapped, Word_wrapped ou Truncated.
Indicando que, quando o texto do pacote Dbms_Output é maior que a largura de uma linha,
o SQL*Plus deve formatar a linha de acordo com uma das opçõess fornecidas.
Listagem 1.29: Exemplo de Serveroutput, Linesize e Pagesize
SQL> SET SERVEROUTPUT ON SIZE 4000 FORMAT WRA
SQL> SET LINESIZE 40
SQL> SET PAGESIZE 10
SQL> BEGIN
2 FOR I IN 1..2 LOOP
3 DBMS_OUTPUT.PUT_LINE ('Teste de quebra de ' ||
4 'linha para apresentação do formato Wrapped. ' ||
5 'Esta opção também pode ser Word_wrapped ou Truncated');
6 END LOOP;
7 END;
8 /
Teste de quebra de linha para apresentaç
ão do formato Wrapped. Esta opção também
pode ser Word_wrapped ou Truncated
Teste de quebra de linha para apresentaç
ão do formato Wrapped. Esta opção também
pode ser Word_wrapped ou Truncated
Prodedimento PL/SQL concluído com sucesso.

Se Wrapped é informado, a quebra de linha ocorre a cada Linesize caracteres. Se


Word_Wrapped é informao, a quebra de linha também ocorre, aproximadamente, a cada
Linesize caracteres, porém em final de palavra. Se for utilizado Truncated, cada linha é
truncada em Linesize caracteres.

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.

Sintaxe 1.34: STORE {SET} file_name[.ext] [CRE[ATE] | REP[LACE] |


APP[END]]
A Listagem 1.30 mostra um trecho do arquivo gerado pelo comando Store.
Listagem 1.30: Exemplo de Store Set
SET APPINFO ON
SET APPINFO "SQL*PLUS"
SET ARRAYSIZE 15
SET AUTOCOMMIT OFF
SET AUTOPRINT ON
SET AUTOTRACE OFF
SET SHIFTINOUT INVISIBLE
SET BLOCKTERMINATOR "."
SET COLSEP " "
SET COMPATIBILITY NATIVE
SET CONCAT "."
SET COPYCOMMIT 0
SET COPYTYPECHECK ON
SET DEFINE "&"
SET ECHO OFF

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

O parâmetro <user> é de forma: <username>[/<password> ] @<espec.do banco de


dados>.

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]

ACIONANDO O SQL*PLUS EM BATCH


Como já vimos anteriormente (ver Exit), podemos executar o SQL*Plus em um
arquivo de comandos para favorecer a execução de scripts em batch. Esta prática é muito
utilizada em ambientes UNIX.

SQLPLUS
Inicia o SQL*Plus a partir da linha de comando do Sistema Operacional
Sintaxe 1.46: SQLPLUS [[-S[ILENT]] [logon] [start]] | -?

Na Sintaxe 1.46, são apresentadas as seguintes opções:


- S[ilent] - Indica que a execução será em batch. Não é aberta janela para o
SQL*Plus.
<logon> - Indica o logon do usuário (username, password, string de conexão, etc.),
/(barra) ou /Nolog. A /(barra) estabelece conexão no usuário default (Ops$<username do
Sistema Operacional>. A opção /Nolog aciona o SQL*Plus mas não estabelece conexão.
Supõe-se que na primeira linha do arquivo de comandos encontraremos o logon adequado.
<arquivo> - Onde informamos o nome do script que desejamos executar. Se o
arquivo não estiver local, todo o caminho (diretório) deve ser informado. Adicionamente
podemos passar os parâmetros necessários á Execução do script (veja o comando start e @.
- (menos) - Mostra a sintaxe do SQL*Plus e retorna ao sistema Operacional.
- ? - Mostra a versão corrente do SQL*Plus e retorna ao sistema operacinal. Não
deve haver espaco entre o sinal de menos e a interrogação.
- Markup - com esta opção podemos gerar as saídas dos relatórios em formato
HTML se habilitarmos a opção HTML (esta mesma ação pode ser obtida com o comando
SET MARKUP HTML ON). o SQL*PLUS gera página complexas contidas nas tags
<html> e <body>. Aopção SPOOL OFF gera saída HTML para ser incluida em uma página
web, porém sem a inclusão das tags <pre> e </pre>. O texto ao lado Head será incluido no
arquivo de saída entre as tags <head> e </ pre>. O texto ao lado da opção Head será
incluído no arquivo de saída entre as tags <head> e </head>. O texto associado à opção
Body permite a especificação de parâmetros para a tab Body. O texto ao lado de Table
permite a especificação permite a especificação de atributos para a tabela tais como
BORDER, CELLPADDING, CELLSPACING E WIDTH. Por default o valor de Width é
90% e Border 1. A opção Entmap se receber o valor OFF manterá os valores de <,> e
"encontrados nos dados lidos do banco de dados intactos, isto é, considerará que as
informações são pertencentes a textos e HTML. Caso esta opção receba o valor ON, os
textos serão tratados, onde < será sustituído por &alt; > será sustituido por &gt, e será
sustituído por &qt.
Linguagem 1.45:Exemplo de Markup
sqlplus -s -m "html on head '<title>teste de html </tittle>' body
BGCOLOR=#ff0000 entmap off spool on" desenv/desenv @cliente
spool teste.htm
Select cd_depto, nm_func
from func
where cd_depto = 'A00'
spool off
exit

Na Listagem 1.45 encontramos inicialmente a linha de comando do SQL*Plus para


a execução de um arquivo de nome arqhtm.sql e saída para arquivo em formato HTML.
O segundo grupo de comandos presente na listagem corresponde ao conteúdo do
aquivo arqhtm.sql. Na listagem 1.46 a seguir apresentamos o resultado gerado.
<html>
<head>
<title> teste de html </title>
<meta name="generator" content = "SQL*Plus 9.0.1>
</head>
...
</body>
</html>

RUNFORM
Chama SQL*Forms a partir do SQL*Plus
Sintaxe 1.47: RUNFORM [options] foprm_name
2. CRIAÇÃO DA BASE RELACIONAL

2.1. Modelo de Dados


A Figura 2.1 apresenta o esquema do modelo de entidades e relacionamento que
iremos utilizar em nossos exemplos.
Func
Cd_mat: NUMBER(5) Depto
Nm_Func: VARCHAR2(12) Cd_Depto: SMALLINT
Nm_Sobrenome: VARCHAR2(12) Nm_Depto: VARCHAR2(40)
Cd_Depto: SMALLINT Cd_Gerente: NUMBER(5)
Nr_Ramal: NUMBER(4) Cd_Depto_Ctb: SMALLINT
Dt_Adm: DATE
Nr_Cargo: NUMBER(3)
Nr_Git: NUMBER(2)
In_Sexo: VARCHAR2(1)
Dt_Nasc: DATE Proj
Vl_Sal: INTEGER
Cd_Proj: SMALLINT
Nm_Foto: VARCHAR2(100)
Nm_Proj: VARCHAR2(30)
Cd_Depto: SMALLINT
Cd_Resp: NUMBER(5)
Qt_Eqp: NUMBER(2)
Dt_Ini: DATE
Dt_Fim: DATE

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

Figura 2.1: Modelo Físico Relacional de Entidade e Relacionamento

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.

Listagem 2.05 – Arquivo L02_05.sql

CREATE TABLE Depto (


Cd_Depto CHAR(3) NOT NULL,
Nm_Depto VARCHAR2(40),
Cd_Gerente NUMBER(5),
Cd_Depto_Ctb CHAR(3),
PRIMARY KEY (Cd_Depto))
STORAGE ( INITIAL 4K
NEXT 4K
MINEXTENTS 1
MAXEXTENTS 5)
PCTFREE 10
PCTUSED 80;
Nesse script, criamos a especificação física da tabela Depto. Observe que foram
fornecidos parâmetros físicos no comando Create Table para que a tabela tivesse um
tamanho reduzido.
Listagem 2.06 – Arquivo L02_06.sql
CREATE TABLE FUNC (
Cd_Mat NUMBER(5) NOT NULL,
Nm_Func VARCHAR2(12) ,
Nm_Sobrenome VARCHAR2(12),
Cd_Depto CHAR(3) REFERENES DEPTO(CD_DEPTO),
Nr_Ramal NUMBER(4),
Dt_Adm DATE ,
Nr_Cargo NUMBER(3) ,
Nr_Git NUMBER(2),
In_Sexo VARCHAR2(1) CHECK (IN_SEXO IN (‘F’, ‘M’)),
Dt_Nasc DATE,
Vl_Sal NUMBER(9,2),
Nm_Foto VARCHAR2(100),
PRIMARY KEY (Cd_Mat))
STORAGE ( INITIAL 4K
NEXT 4K
MINEXTENTS 1
MAXEXTENTS 5)
PCTFREE 10
PCTUSED 80;
Neste script criamos a tabela Func que já estabelece o relacionamento com a Tabela
Depto e cria uma regra de integridade para a coluna in_sexo.

Listagem 2.07 – Arquivo L02_07.sql


CREATE TABLE Proj (
Cd_Proj CHAR(6) NOT NULL,
Nm_Proj VARCHAR2(30) NOT NULL,
Cd_Depto CHAR(3) NOT NULL REFERENCES DEPTO (CD_DEPTO),
Cd_Resp NUMBER(5) NOT NULL REFERENCES FUNC (CD_MAT),
Qt_Eqp NUMBER(2),
Dt_Fim DATE,
Dt_Ini DATE,
PRIMARY KEY (CD_PROJ))
STORAGE ( INITIAL 4K
NEXT 4K
MINEXTENTS 1
MAXEXTENTS 5)
PCTFREE 10
PCTUSED 80;

A criação da tabela Proj apresentada na Listagem 2.07 já estabelece os


relacionamentos com as tabelas Depto e Func.
Listagem 2.08 – Arquivo L02_08.sql
CREATE TABLE Ativ (
Cd_Ativ NUMBER(3) PRIMARY KEY,
Nm_Sigla VARCHAR2(12),
Tx_Descricao VARCHAR2(30))
ORGRANIZATION INDEX
STORAGE ( INITIAL 4K
NEXT 2K
MINEXTENTS 1
MAXEXTENTS 3);
A criação da Tabela Ativ apresenta como particularidade a expressão Organization
Index, indicando que não haverá estruturas separadas para os dados e a PK. Será construída
uma única estrutura B*tree contendo o índice e na mesma linha os dados correspondentes.
Essa tabela não possui Rowid físico e sim lógico. Estudaremos esse assunto mais a seguir.
Listagem 2.09 – Arquivo L02_09.sql
CREATE TABLE PrjAtv (
Cd_Proj CHAR(6) NOT NULL REFERENCES PROJ,
Cd_Ativ NUMBER(3) NOT NULL REFERENCES ATIV,
Dt_Fim DATE NOT NULL,
Dt_Ini DATE NOT NULL,
PRIMARY KEY (CD_PROJ, CD_ATIV))
STORAGE ( INITIAL 8K
NEXT 8K
MINEXTENTS 1
MAXEXTENTS 5)
PCTFREE 10
PCTUSED 80;
Na Listagem 2.09, criou-se a Tabela Projetos-Atividades com os
relacionamentos estabelecidos para as tabelas Proj e Ativ.
Listagem 2.10 – Arquivo L02_10.sql
CREATE TABLE HST_PROMO (
Dt_Promocao DATE NOT NULL,
Cd_Mat NUMBER(5) NOT NULL,
VL_SAL NUMBER(9,2),
CD_DEPTO CHAR(3),
NR_CARGO NUMBER(3),
TX_MOTIVO VARCHAR2(200),
PRIMARY KEY (Dt_Promocao, Cd_Mat)
STORAGE ( INITIAL 4K
NEXT 4K
MINEXTENTS 1
MAXEXTENTS 15)
PCTFREE 10
PCTUSED 80
PARTITION BY RANGE (DT_PROMOCAO)
(PARTITION ANOS80 VALUES LESS THAN (TO_DATE(‘01011990’,’DDMMYYY’)),
PARTITION ANOS90_94 VALUES LESS THAN
(TO_DATE(‘01011995’,’DDMMYYY’)),
PARTITION ANOS95_99 VALUES LESS THAN
(TO_DATE(‘01012000’,’DDMMYYY’)),
PARTITION ANOS2000
VALUES LESS THAN (MAXVALUE));

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.

Listagem 2.11 – Arquivo L02_11.sql

INSERT INTO DEPTO VALUES


(‘A00’, ‘DIRETORIA DA EMPRESA’, 10, NULL);
INSERT INTO DEPTO VALUES
(‘B01’, ‘ASSESSORIA’, 20, ‘A00’);
INSERT INTO DEPTO VALUES
(‘C01’, ‘CENTRO DE INFORMACAO’, 30, ‘A00’);
INSERT INTO DEPTO VALUES
(‘D01’, ‘DIRETORIA DE SISTEMAS’, NULL, ‘A00’);
INSERT INTO DEPTO VALUES
(‘D11’, ‘GERENCIA DE SISTEMAS COMERCIAIS’, 60, ‘D01’);
INSERT INTO DEPTO VALUES
(‘D21’, ‘GERENCIA DE SISTEMAS ADMINISTRATIVOS’, 70, ‘D01’);
INSERT INTO DEPTO VALUES
(‘E01’, ‘DIRETORIA DE SUPORTE/PRODUCAO’, 50, ‘A00’);
INSERT INTO DEPTO VALUES
(‘E11’, ‘OPERACAO’, 90, ‘E01’);
INSERT INTO DEPTO VALUES
(‘E21’, ‘SUPORTE DE SOFTWARE’, 100, ‘E01’);

Na Listagem 2.11 estão sendo cadastrados os dados referentes à Tabela Depto. A


seguir os dados referentes a Tabela Func.
Listagem 2.12 – Arquivo L02_12.sql
INSERT INTO FUNC VALUES
(10, ‘CRISTINA’, ‘HENDERSON’, ‘A00’, 3978, ‘01011995’, 66.18,’F’, ‘14081953’,
5275, ‘C:\FOTOS\CRIS.BMP’);
INSERT INTO FUNC VALUES
(20, ‘MIGUEL’, ‘TEIXEIRA’, ‘B00’, 3478, ‘10101993’, 61.18,’M’, ‘02021968’, 4125,
‘C:\FOTOS\MIGUEL.BMP’);
INSERT INTO FUNC VALUES
(30, ‘SANDRA’, ‘KWAN’, ‘C01’, 4738, ‘05041995’, 60.20,’F’, ‘11051961’, 3825,
‘C:\FOTOS\SANDRA.BMP’);
INSERT INTO FUNC VALUES
(50, ‘JOAO’, ‘GOMES’, ‘E01’, 6789, ‘17081989’, 58.16,’M’, ‘15091955’, 4017,
‘C:\FOTOS\JOAO.BMP’);
INSERT INTO FUNC VALUES
(60, ‘IRACY’, ‘SOUZA’, ‘D11’, 6423, ‘14091993’, 55.16,’F’,‘07071955’,3225,
‘C:\FOTOS\IRACY.BMP’);
INSERT INTO FUNC VALUES
(70, ‘EVA’, ‘PEREIRA’, ‘D21’, 7831, ‘30091990’, 56.16,’F’,‘26051963’, 3617,
‘C:\FOTOS\EVA.BMP’);
INSERT INTO FUNC VALUES
(90, ‘ELIANE’, ‘HONOFRE’, ‘E11’, 5498, ‘15081995’, 55.16,’F’, ‘15051971’, 2975,
‘C:\FOTOS\ELIANE.BMP’);
INSERT INTO FUNC VALUES
(100, ‘TEODORO’, ‘SIQUEIRA’,‘E21’,972, ‘16061990’, 54.14,’M’, ‘18121966’, 2615,
‘C:\FOTOS\TEODORO.BMP’);
INSERT INTO FUNC VALUES
(110, ‘VICENTE’,‘LOURENCO’,‘A00’, 3490, ‘16051994’,58.19,’M’,‘06111969’, 4650,
‘C:\FOTOS\VICENTE.BMP’);
INSERT INTO FUNC VALUES
(120,‘SILVIO’,‘OLIVA’,‘A00’,2167,‘05121993’,58.14,’M’,‘18011962’,2925,
‘C:\FOTOS\SILVIO.BMP’);
INSERT INTO FUNC VALUES
(130, ‘DOLORES’,‘QUEIROZ’,‘C01’, 4578, ‘28071991’, 55.16,’F’,‘15091955’, 2380,
‘C:\FOTOS\DOLORES.BMP’);
INSERT INTO FUNC VALUES
(140, ‘HELENA’, ‘NOVAES’, ‘C01’, 1793, ‘15121991’, 56.18,’F’, ‘19011956’, 2842,
‘C:\FOTOS\HELENA.BMP’);
INSERT INTO FUNC VALUES
(150, ‘BRUNO’, ‘AZEVEDO’, ‘D11’, 4510, ‘12021992’, 55.16,’M’, ‘17051967’, 2528,
‘C:\FOTOS\BRUNO.BMP’);
INSERT INTO FUNC VALUES
(160, ‘ELIZABET’, ‘PINTO’, ‘D11’, 3782, ‘11011993’, 54.17,’F’,‘12041965’, 2225,
‘C:\FOTOS\BETH.BMP’);
INSERT INTO FUNC VALUES
(170, ‘GABRIEL’, ‘YVES’, ‘D11’, 2890, ‘15091989’, 54.16,’M’, ‘05011971’, 2468,
‘C:\FOTOS\GABRIEL.BMP’);
INSERT INTO FUNC VALUES
(180, ‘MARIA’, ‘SANCHES’, ‘D11’, 1682, ‘07071990’, 53.17,’F’, ‘21021969’, 2134,
‘C:\FOTOS\MARIA.BMP’);
INSERT INTO FUNC VALUES
(190, ‘JAIRO’, ‘WILARES’, ‘D11’, 2986, ‘26071995’, 53.26,’M’, ‘25061972’, 2045,
‘C:\FOTOS\JAIRO.BMP’);
INSERT INTO FUNC VALUES
(200, ‘DAVI’, ‘BARBOSA’, ‘D11’, 4501, ‘03031996’, 55.16,’M’, ‘29051971’, 2774,
‘C:\FOTOS\DAVI.BMP’);
INSERT INTO FUNC VALUES
(210, ‘WILIAM’, ‘JONES’, ‘D11’, 942, ‘11041994’, 52.17,’M’, ‘23021963’, 1827,
‘C:\FOTOS\WILIAN.BMP’);
INSERT INTO FUNC VALUES
(220, ‘JOANA’, ‘LUZ’, ‘D11’, 672, ‘29081995’, 55.18,’F’, ‘19031968’, 2984,
‘C:\FOTOS\JOANA.BMP’);
INSERT INTO FUNC VALUES
(230, ‘JOAQUIM’, ‘JANUARIO’, ‘D21’, 2094, ‘21111995’, 53.14,’M’, ‘30051965’, 2218,
‘C:\FOTOS\JOAQUIM.BMP’);
INSERT INTO FUNC VALUES
(240, ‘SALVADOR’, ‘MEDEIROS’, ‘D21’, 3780, ‘05121993’, 55.17,’M’, ‘31031974’,
2876, ‘C:\FOTOS\SALVADOR.BMP’);
INSERT INTO FUNC VALUES
(250, ‘DANIEL’, ‘SANTANA’, ‘D21’, 961, ‘30101999’, 52.15,’M’, ‘12111969’, 1918,
‘C:\FOTOS\DANIEL.BMP’);
INSERT INTO FUNC VALUES
(260, ‘SILVIA’, ‘JUVENTO’, ‘D21’, 8953, ‘11091995’, 52.16,’F’, ‘05101966’, 1725,
‘C:\FOTOS\SILVIA.BMP’);
INSERT INTO FUNC VALUES
(2107, ‘MARTA’, ‘PARENTE’, ‘D21’, 9001, ‘30091990’, 55.15,’F’, ‘26051973’, 2738,
‘C:\FOTOS\MARTA.BMP’);
INSERT INTO FUNC VALUES
(280, ‘ELINE’, ‘SEVERO’,‘E11’,8997, ‘24031991’, 54.17,’F’, ‘28031966’, 2625,
‘C:\FOTOS\ELIANE.BMP’);
INSERT INTO FUNC VALUES
(290, ‘JOAO’, ‘PONTES’,‘E11’, 4502, ‘30051990’, 42.12,’M’, ‘09071966’, 1534,
‘C:\FOTOS\JOAO.BMP’);
INSERT INTO FUNC VALUES
(300, ‘FELIPE’, ‘SARAIVA’, ‘E11’, 2095, ‘19061992’, 48.14,’M’, ‘27101956’, 1775,
‘C:\FOTOS\FELIPE.BMP’);
INSERT INTO FUNC VALUES
(310, ‘MARINA’, ‘SALGADO’, ‘E11’, 3332, ‘12091991’, 43.12,’F’, ‘21041971’, 1590,
‘C:\FOTOS\MARINA.BMP’);
INSERT INTO FUNC VALUES
(320, ‘ROBERTO’, ‘MARQUES’, ‘E21’, 9990, ‘07071990’, 52.16,’M’, ‘11081972’, 1995,
‘C:\FOTOS\ROBERTO.BMP’);
INSERT INTO FUNC VALUES
(330, ‘WILSON’, ‘LOPES’, ‘E21’, 2103, ‘23021996’, 55.14,’M’, ‘18071971’, 2537,
‘C:\FOTOS\WILSON.BMP’);
INSERT INTO FUNC VALUES
(340, ‘DILSON’, ‘GONCALVES’, ‘E21’, 5698, ‘05051996’, 54.16,’M’, ‘17051966’, 2384,
‘C:\FOTOS\DILSON.BMP’);
A Listagem 2.13 apresenta os dados referentes a PROJ.
Listagem 2.13 – Arquivo L02_13.sql
INSERT INTO PROJ VALUES
(‘MA2100’,’AUTOMACAO COMERCIAL’,’D21’,070, 12, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘MA2110’,’PROGRAMACAO’,’D11’,060, 09, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘MA2111’,’ANALISE’,’D11’,150, 02, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘MA2112’,’LEVANTAMENTO’,’D11’,060, 03, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘MA2113’,’DEPURACAO’,’D11’,170, 03, ‘15021996’, ‘15091996’);
INSERT INTO PROJ VALUES
(‘PL2100’,’PLANEJAMENTO’,’D01’,020, 01, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘IF1000’,’CONSULTORIA’,’C01’,030, 02, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘IF2000’,’TREINAMENTO’,’C01’,130, 01, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘AD3100’,’SERVICOS ADMINISTRATIVOS’,’A00’,010,06,‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘AD3110’,’ADMINISTRACAO GERAL’,’A00’,110, 06, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘AD3111’,’PROGRAMACAO DE PAGAMENTO’,’D21’,240,02,‘01011996’,
‘01021996’);
INSERT INTO PROJ VALUES
(‘AD3112’,’PROGRAMACAO DE PESSOAL’,’D21’,250, 01, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘AD3113’,’ASSISTENCIA MEDICA’,’D21’,070, 02, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘OP1000’,’SUPORTE PRODUCAO’,’E01’,050, 06, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘OP2010’,’SUPORTE SISTEMAS’,’E21’,320, 04, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘OP2011’,’SUPORTE SOFTWARE’,’E21’,330, 01, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘OP2012’,’SUPORTE USUARIO’,’E21’,340, 01, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘OP2013’,’SUPORTE DB/DC’,’E21’,100, 00, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘OP1010’,’OPERACAO’,’E11’,090, 05, ‘01011996’, ‘01021996’);
INSERT INTO PROJ VALUES
(‘OP2000’,’SISTEMAS DE CONTROLE’,’E01’,050, 05, ‘01011996’, ‘01021996’);
A Listagem 2.14 apresenta os dados de Ativ.
Listagem 2.14 – Arquivo L02_14.sql
INSERT INTO ATIV VALUES (10, ‘GERENCIA’, ‘GERENCIA’);
INSERT INTO ATIV VALUES (20, ‘CUSTO’, ‘ESTIMATIVA DE CUSTO’);
INSERT INTO ATIV VALUES (30, ‘LEVANTAMENTO’, ‘FASE DE
LEVANTAMENTO’);
INSERT INTO ATIV VALUES (40, ‘DEFINICAO’, ‘DEFINICAO DE PROGRAMAS’);
INSERT INTO ATIV VALUES (50, ‘APRESENTACAO’, ‘APRESENTACAO DO
PROJETO’);
INSERT INTO ATIV VALUES (60, ‘LOGICA’, ‘DESCRICAO DA LOGICA’);
INSERT INTO ATIV VALUES (70, ‘CODIGO’, ‘CODIFICACAO DE PROGRAMAS’);
INSERT INTO ATIV VALUES (80, ‘TESTE’, ‘TESTE DE PROGRAMA’);
INSERT INTO ATIV VALUES (90, ‘FISICO’, ‘PROJETO FISICO’);
INSERT INTO ATIV VALUES (100, ‘CURSO’, ‘MINISTRAR CURSOS’);
INSERT INTO ATIV VALUES (110, ‘PREPARACAO’, ‘DESENVOLVIMENTO DE
CURSOS’);
INSERT INTO ATIV VALUES (120, ‘PESSOAL’, ‘ADMINISTRACAO DE
PESSOAL’);
INSERT INTO ATIV VALUES (130, ‘OPERACAO’, ‘OPERACAO DE SISTEMAS’);
INSERT INTO ATIV VALUES (140, ‘MANUTENCAO’, ‘MANUTENCAO DE
SOFTWARE’);
INSERT INTO ATIV VALUES (150, ‘ADMPROD’, ‘ADMINISTRACAO DE
PRODUCAO’);
INSERT INTO ATIV VALUES (160, ‘ADMBD’, ‘ADMINISTRACAO DE BANCO DE
DADOS’);
INSERT INTO ATIV VALUES (170, ‘ADMREDE’, ‘ADMINISTRACAO DE REDE’);
INSERT INTO ATIV VALUES (180, ‘DOC’, ‘DOCUMENTACAO DE SISTEMAS’);
A listagem a seguir apresenta os dados de PROJATIV.
Listagem 2.15 – Arquivo L02_15.sql
INSERT INTO PROJATIV VALUES ('AD3110',10, '12041989','22041989');
INSERT INTO PROJATIV VALUES ('AD3110',40, '28121991','07011992');
INSERT INTO PROJATIV VALUES ('AD3110',70, '13091994','23091994');
INSERT INTO PROJATIV VALUES ('AD3111',20, '27061990','28071990');
INSERT INTO PROJATIV VALUES ('AD3111',50, '13031993','12041993');
INSERT INTO PROJATIV VALUES ('AD3111',80, '28111995','29121995');
INSERT INTO PROJATIV VALUES ('AD3112',20, '29061990','01071990');
INSERT INTO PROJATIV VALUES ('AD3112',50, '15031993','17031993');
INSERT INTO PROJATIV VALUES ('AD3112',80, '30111995','02121995');
INSERT INTO PROJATIV VALUES ('AD3113',30, '29031991','21041991');
INSERT INTO PROJATIV VALUES ('AD3113',60, '13121993','05011994');
INSERT INTO PROJATIV VALUES ('AD3113',90, '29081996','21091996');
INSERT INTO PROJATIV VALUES ('IF1000',10, '16031989','23031989');
INSERT INTO PROJATIV VALUES ('IF1000',40, '01121991','08121991');
INSERT INTO PROJATIV VALUES ('IF1000',70, '17081994','24081994');
INSERT INTO PROJATIV VALUES ('IF2000',30, '14121990','01011991');
INSERT INTO PROJATIV VALUES ('IF2000',60, '30081993','17091993');
INSERT INTO PROJATIV VALUES ('IF2000',90, '16051996','03061996');
INSERT INTO PROJATIV VALUES ('MA2100',40, '04111991','05121991');
INSERT INTO PROJATIV VALUES ('MA2100',70, '21071994','21081994');
INSERT INTO PROJATIV VALUES ('MA2110',10, '19021989','21021989');
INSERT INTO PROJATIV VALUES ('MA2110',40, '06111991','08111991');
INSERT INTO PROJATIV VALUES ('MA2110',70, '23071994','25071994');
INSERT INTO PROJATIV VALUES ('MA2110',100, '08041997','10041997');
INSERT INTO PROJATIV VALUES ('MA2111',20, '19111989','12121989');
INSERT INTO PROJATIV VALUES ('MA2111',50, '05081992','28081992');
INSERT INTO PROJATIV VALUES ('MA2111',80, '22041995','15051995');
INSERT INTO PROJATIV VALUES ('MA2113',30, '24011990','08111990');
INSERT INTO PROJATIV VALUES ('MA2113',60, '10071993','25071993');
INSERT INTO PROJATIV VALUES ('MA2113',90, '26031996','10041996');
INSERT INTO PROJATIV VALUES ('OP2000',20, '20081990','30081990');
INSERT INTO PROJATIV VALUES ('OP2000',50, '06051993','16051993');
INSERT INTO PROJATIV VALUES ('OP2000',80, '21011996','31011996');
INSERT INTO PROJATIV VALUES ('OP2010',10, '16061989','01071989');
INSERT INTO PROJATIV VALUES ('OP2010',40, '02031992','17031992');
INSERT INTO PROJATIV VALUES ('OP2010',70, '17111994','02121994');
INSERT INTO PROJATIV VALUES ('OP2011',30, '12061991','08071991');
INSERT INTO PROJATIV VALUES ('OP2011',60, '26021994','24031994');
INSERT INTO PROJATIV VALUES ('OP2011',90, '12111996','08121996');
INSERT INTO PROJATIV VALUES ('OP2012',20, '24071990','31071990');
INSERT INTO PROJATIV VALUES ('OP2012',50, '09041993','16041993');
INSERT INTO PROJATIV VALUES ('OP2012',80, '25121995','01011996');
INSERT INTO PROJATIV VALUES ('OP2013',10, '06081989','24081989');
INSERT INTO PROJATIV VALUES ('OP2013',40, '22021992','10051992');
INSERT INTO PROJATIV VALUES ('OP2013',70, '07011995','25011995');
INSERT INTO PROJATIV VALUES ('PL2100',20, '02021990','28021990');
INSERT INTO PROJATIV VALUES ('PL2100',50, '19101992','14111992');
INSERT INTO PROJATIV VALUES ('PL2100',80, '06071995','01081995');
Finalmente, a carga de dados para a tabela de Histórico.
Listagem 2.16 – Arquivo L02_16.sql
INSERT INTO HST_PROMO
(DT_PROMOCAO, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, TX_MOTIVO)
SELECT DT_ADM, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, ‘ADMISSIO’
FROM FUNC
/
INSERT INTO HST_PROMO
(DT_PROMOCAO, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, TX_MOTIVO)
SELECT DT_ADM+1/1440, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, ‘CARGO
GERENCIAL, NÃO HAVERA % DE VALOR ADICIONAL’
FROM FUNC
WHERE CD_MAT IN (SELECT CD_GERENTE FROM DEPTO);
O último script executa todos os demais e estabelece o relacionamento da tabela
Depto com a Tabela Func, o auto-relacionamento e dá Commit em todas as atualizações
realizadas. Como último passo, fecha o SQL*PLUS.
Listagem 2.17 – Arquivo L02_17.sql
@ C:\SQL\L02_04;
@ C:\SQL\L02_05;
@ C:\SQL\L02_06;
@ C:\SQL\L02_07;
@ C:\SQL\L02_08;
@ C:\SQL\L02_09;
@ C:\SQL\L02_10;
@ C:\SQL\L02_11;
@ C:\SQL\L02_12;
@ C:\SQL\L02_13;
@ C:\SQL\L02_14;
@ C:\SQL\L02_15;
@ C:\SQL\L02_16;
ALTER TABLE DEPTO
ADD FOREIGN KEY (CD_DEPTO_CTB) REFERENCES DEPTO;
ALTER TABLE DEPTO
ADD FOREIGN KEY (CD_GERENTE) REFERENCES FUNC;
COMMIT;
QUIT;

2.3. Criando o atalho para o SQL*PLUS


Crie um atalho no Windows para o programa c:\Oracle\Ora90\bin\sqlplusw.exe.
Preencha a propriedade “Iniciar em” com o nome do diretório onde você instalou os
arquivos para a criação da base de dados. No nosso caso C:\SQL (Onde C:\SQL é o Path
desejado).
Execute o atalho definido para que o SQL*PLUS seja ativado. Estabeleça conexão
com o usuário criado no início deste capítulo (Desenv) e, finalmente, execute o arquivo
(script) L02_17.SQL na linha de comando do SQL*PLUS conforme o exemplo a seguir:
SQL> @L02_17.sql;
Todos os demais arquivos serão executados instalando a base de dados relacional.

Você também pode gostar