Você está na página 1de 43

1.

Introduo

1.1. Conceito de Banco de Dados Relacional

O princpio do modelo relacional foi definido pela primeira vez pelo Dr. E. F. Codd em
junho de 1970, atravs de um documento chamado !A Relational Model of Data for Large
Shared Data Banks". Nesse documento o Dr. Codd prope o modelo relacional para
Sistemas de Banco de Dados.
Os mais populares modelos usados at ento se baseavam no Hierrquico e de Rede ou
simplesmente estruturas isoladas de arquivos. Sistemas de Administrao de Banco de
Dados Relacionais # RDBMS # tornaram-se muito popular em pouco tempo devido a sua
facilidade e flexibilidade. Alm disso, vrios 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 aplicaes.

1.2. Conceito do Modelo Relacional

Coleo de objetos ou relaes armazenam dados;
Conjunto de operadores podem agir nos relacionamentos para produzir outras
relaes;
Um banco de dados relacional deve garantir integridade de dados, alm de ser
preciso e consistente.

1.2.1. Funes do Banco de Dados Relacional

Administrar os dados armazenados;
Controlar os acessos aos dados;
Garantir recuperao e alterao dos dados;
1.2.2. Terminologia do Banco de Dados Relacional

Conceito Descrio
Table
(Tabela)
Estrutura bsica de armazenamento de um RDBMS, consistindo
em uma ou mais colunas e zero ou mais linhas.
Row
(Linha)
uma combinao de valores de colunas em uma tabela.
Column
(Coluna)
Representa um tipo de dado em uma tabela.
Field
(Campo)
a interseco de uma linha com uma coluna. O campo pode
conter dado, caso no tenha no tenha dizemos que null (nulo).
Primary Key
(Chave Primria)
a coluna ou o conjunto de colunas que identificam uma linha
como sendo nica dentro de uma tabela.
Foreign Key
(Chave Estrangeira)
a coluna ou o conjunto de colunas que faz referncia a chave
primria na mesma ou em outra tabela. usado para reforar as
regras do Banco de Dados Relacional.

OBS:
Chave primria somente aceita valores no duplicados;
Primary Keys geralmente no so alteradas;
Foreign Keys so baseadas nos valores do dado e assim existem apenas como uma
regra lgica e no ponteiros fsicos;
Foreign Key deve ter seu valor coincidido com a da primary key (da tabela
relacionada), ou ento ser null.

1.2.3. Propriedades do Banco de Dados Relacional

Banco de dados uma coleo de nomes de objetos nicos, tal como uma tabela.
Assim, no h necessidade de ser especificado o caminho fsico bem como a sua disposio
fsica para acess-la.
Para acessar um Banco de Dados necessrio executar um comando SQL (Structured
Query Language), a qual a linguagem padro de acesso a Bancos de Dados Relacionais
segundo a ANSI (American National Standards Institute).

1.2.4. Objetos do Banco de Dados

Objeto Descrio
Table Unidade bsica de armazenamento composta por colunas e linhas
View Representao lgica de conjuntos de dados de ma ou mais tabelas
Sequence Gerador de chaves primrias (primary key)
Index Implementa performance a consultas (queries)
Program Unit Procedure, function, ou package de instrues agrupadas de SQL e
PL/SQL.


Propriedades da tabela:
Uma tabela composta por colunas e linhas;
As interseces de linhas e colunas so campos de valores;
Cada linha pode ser identificada por uma chave primria, a qual no permite valores
duplicados;
A ordem (seqncia) de linhas no relevante ao Banco;
Por default, os dados so armazenados na ordem como foram inseridos;
Cada nome de coluna deve ser nico na tabela;
A ordem das colunas no relevante quando se armazenam dados;
Devem ser informadas as colunas que se deseja recuperar;
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
integridade
Descrio
Entidade Chave primria no pode ser null e deve ser nica
Referencial Chave estrangeira deve ter valores que coincidam com as da
chave primria ou serem null
Coluna Valores na coluna deve coincidir com tipo definido para ela
(datatype)
User-defined Validaes definidas segundo regras de negcio (business
rules)

1.2.6. Ciclo de Desenvolvimento de Sistemas

Sistemtica do tipo top-down permite que ao longo das suas etapas sejam verificadas todas
as necessidades para transformar necessidades de Informaes de Negcio em um Sistema
de Informao.

Estgio Ao
Estratgia e Anlise Analisa necessidade do Negcio. Constri modelo do sistema.
Projeto Definir a partir do modelo o Banco de Dados.
Construo e
Documentao
Desenvolvimento e teste do software. Documentao para
usurio, ajuda de telas e manual de operao.
Transio Fase de testes de usurios, auditoria.
Produo Entrada efetiva do sistema em operao.

1.2.7. O que Oracle

uma empresa de Banco de Dados que oferece um conjunto de aplicaes suficientes
para garantir completa soluo em tecnologia de informao. As aplicaes Oracle tm
como uma das principais caractersticas a sua portabilidade, oferecido para praticamente
qualquer plataforma e sistema operacional, desde computadores pessoais at servidores
multiprocessados.

Alguns produtos:
Discoverer 2000 Ferramenta gerencial
Designer 2000 Ferramenta de anlise
Developer 2000 Ferramenta de desenvolvimento

1.2.8. SQL, SQL*Plus e PL/SQL

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


1.2.9. Caractersticas do SQL

Fcil utilizao;
Linguagem no procedural;

1.3. Introduo ao SQL*Plus

1.3.1. Introduo 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 extenso
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 atravs de uma lgica procedural.

1.3.2. Acessando o SQL*Plus

Esta ferramenta est normalmente disponvel em dois tipos de ambiente, caracter e
grfico (ex:Windows 98).

1.3.3. Linha de Comando

c:\orawin95\bin>sqlplus.exe

Obs: sendo que o comando foi executado dentro do subdiretrio onde o arquivo
executvel estava, porm normalmente este local acrescentado ao PATH do S.O. (Sistema
Operacional) durante a instalao do Oracle.

1.3.4. Ambiente Grfico

Com um double-click no seu cone. Este ser nosso ambiente de estudo.
Logo aps a sua chamada aparece a tela de logon, na qual dever ser entrada as
informaes:
User Name: nome do usurio cadastrado no Banco de Dados a ser referenciado;
Password: a senha do usurio indicado;
Host String: o nome da string de conexo, ou seja o nome (alias) do Banco de
Dados. Para entendimento verificar o aplicativo SQL*Net Easy Configuration.

Na seqncia, temos a tela do SQL*Plus:

1.3.5. Escrevendo Comandos SQL

A digitao na linha do prompt pode ser contnua (uma nica linha), ou pode ocupar
mais de uma linha, bastando que teclemos [Enter] para que seja mostrada uma numerao
seqencial no lado esquerdo do vdeo, indicando que o SQL*Plus considerou continuao
do estado de digitao.

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 clusulas, por facilidade de visualizao, so comumente
separadas em diferentes linhas;
3. .TAB e indentaes no afetam o comando;
4. .palavras chaves e comandos so comumente colocados em caixa
alta, e o restante em caixa baixa;
5. .comandos SQL no so case sensitive (caixa alta e baixa);
6. .quando um comando SQL usar mais de uma linha, estas estaro
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 vrgula);
-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 memria chamada SQL Buffer (ver Figura 1.1).

Quando terminamos a digitao, esta rea de memria, 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 informao, a formata e apresenta ao usurio.




1.4. Comando SQL*Plus

Figura 1.1: Esquema de Funcionamento do SQL*PLUS
SQL*PLUS
Usurrio
Linha de Prompt
Resultado
Caractersticas
do SQL*PLUS
Sql Buffer
Banco de Dados ORACLE
No Esquema da Figura 1.1, observa-se que nem todos os comandos digitados so
colocados na rea de Buffer para transmisso ao banco de dados. Isto ocorre porque o
SQL*Plus possui tambm comandos prprios com a finalidade de:
Editar o comando SQL armazenado no Buffer;
Formatar os resultados retornados pelo Banco de Dados;
Armazenar os comandos de SQL para o disco e recupera-los para execuo;
Modificar o modo de trabalhar do SQL*Plus;
Enviar mensagens e receber respostas de outros usurios;
Listar a definio de qualquer tabela;
Fazer acesso e copiar dados entre banco de dados.

1.4.1. Comandos de Edio do SQL*PLUS
Os comandos de edio tm o objetivo de modificar a informao armazenada no SQL
Buffer. Estes comandos afetam apenas uma linha de cada vez, isto , a edio feita linha a
linha.
Quando listamos o contedo do SQL Buffer, o SQL*Plus mostra do lado esquerdo do
texto (ao lado da numerao) um asterisco (*) em uma das linhas, indicando que se trata da
linha corrente, ou seja, da linha apta para modificao. Desta forma, qualquer comando de
edio 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 2
a
linha do SQL Buffer
2* 'Teste'
SQL> l * 4 //mostra da linha vigente at a 4
a
Linha do SQL Buffer.
2 'Teste'
3 from
4* dual
SQL> l last
4* dual
SQL> l 1 * //mostra da 1
a
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 minscula. Repita o exemplo
utilizando letra maiscula: Voc poder observar que os comandos do SQL*Plus so case
sensitive, isto , a informao pode ser fornecida em letra minscula ou maiscula
indiferentemente.
Repita o teste apresentado na Listagem 1.02 com outras opes sintticas. Verifique se
ocorre alguma diferena na digitao dos comandos em letra maiscula ou minscula.

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 aps
o texto existente na linha corrente, mesmo havendo um branco entre o comando e o texto.
Observe, ainda, que aps a execuo do comando, o SQL*Plus apresenta a linha
modificada para verificao.
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-vrgula ao final de alguma linha.
Isto no possvel, uma vez que o ponto e virgula no faz parte da sintaxe do SQL e tem
uma conotao especial para o SQL*Plus, pois indica trmino de digitao e solicitao de
execuo. Se, porm, o trecho que estivermos digitando no for de SQL e sim de PL/SQL,
teremos necessidade de incluir o ponto-e-vrgula no texto. Para que isto seja possvel,
devemos repetir a ao realizada com o branco, ou seja, para a incluso de um ponto-e-
vrgula ao final do texto, devemos digitar dois ponto-e-vrgulas seguidos.

CHANGE
Altera texto na linha contida no buffer.
Sintaxe 1.03: C[HANGE] sepchar old [ sepchar [ new [ sepchar] ] ]

Este comando de edio tem o objetivo de substituir parte do texto (ou todo) por
outro. O separador (<sepchar>) pode ser qualquer caractere especial que no esteja presente
no texto <old> nem no texto <new>.
Observe que os separadores apresentados so iguais. Pode-se utilizar qualquer
caractere especial no presente nos textos, porm, 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 substituio 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 substituio pelo texto <new> e o comando encerrado. Se desejarmos repetir a
substituio 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.
n m 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 no sejam
informados parmetros que indiquem a linha a ser removida, ser excluda 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 aps a linha corrente no SQL buffer.
Sintaxe 1.05: I[NPUT] [text]
Este commando adiciona uma ou mais linhas aps a linha corrente (no SQL Buffer).
Este comando difere do comando Append uma vez que pode voltar ao estado de digitao,
abrindo uma nova linha para digitao imediatamente aps a linha corrente.
Quando digitamos o comando juntamente com um texto, cria-se uma nova linha
imediatamente aps a linha corrente, sendo seu contedo o texto informado. Quando
digitamos apenas o comando, o SQL*Plus volta ao estado de digitao, apresentando uma
linha vazia com a numerao 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 contedo do SQL Buffer novamente, as linhas j foram
renumeradas.
EDIT
Este Comando aciona um editor registrado no Windows e passa como parmetro 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 parmetro o texto do SQL Buffer.
Quando desejamos editar um determinado arquivo, seu nome pode ser informado
com ou sem a extenso. A extenso 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 atravs de uma varivel 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 varivel solicitada.
No segundo caso, sero apresentadas todas as variveis existentes at o momento.
Posteriormente, no item referente a outros comandos do SQL*Plus, veremos o que
so as variveis de substituio (ou variveis definidas pelo usurio) e como podemos criar
novas variveis ou remove-las.
Listagem 1.07: Variveis de substituio do SQL*Plus
SQL> DEFINE
DEFINE SQL_PLUS_RELESE = !

O editor padro no Windows o bloco de notas (Notepad). Antes de substituirmos o
editor-padro por outro de nossa escolha, devemos nos lembrar de que o editor escolhido
deve aceitar um parmetro correspondente ao arquivo a ser editado. A Figura 2 apresenta a
execuo do comando Edit sem que informemos o nome do arquivo.


Figura 1.2: Comando EDIT sem parmetros
Observe a mensagem na linha imediatamente abaixo da linha de prompt. Nesta
situao, o SQL*Plus deveria passar como parmetro para o editor o contedo 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 parmetro para o editor.
Quando efetuamos as modificaes 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 aps a
ltima linha lida para que continuemos a digitao. Experimente.
O diretrio do Windows onde sero gravados (ou lidos) os arquivos de trabalho pode
ser controlado por ns (default C:\<Oracle Home>\Bin). Se criarmos um atalho para o
SQL*Plus (o executvel se encontra na pasta C:\<Oracle Home>\Bin e se chama
SQLPlus.exe), basta que modifiquemos o diretrio Iniciar em da pasta Atalho (ver Figura
1.3), obtido ao pressionarmos o boto direito do mouse sobre o cone do SQL*Plus e
escolhermos a opo Propriedade.
Podemos tambm modificar o diretrio de trabalho do atalho apresente na pasta
Application Development da seguinte forma: clicar no boto iniciar (do Windows), opo
Configuraes, opo Barra de Tarefas e menu Iniciar, pasta Avanado, clicar no boto
Avanado, expandir o n Programas, pesquisar (subordinado pasta Documents and
Settings) a pasta All Users e expandi-la, seguir expandindo seqencialmente 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
boto direito do mouse sobre o cone do SQL*Plus e escolher a opo Propriedades.
Novamente ser mostrada a tela de propriedades e, na pasta Atalho, poderemos alterar o
diretrio Iniciar Em (ver Figura 1.3). Para que a modificao tenha efeito, o SQL*Plus
deve ser reiniciado.


Figura 1.3: Propriedades do atalho SQL*Plus

Com esta modificao, qualquer arquivo a ser lido ou gravado pelo SQL*Plus o ser
no novo diretrio default. Se desejarmos efetuar a leitura ou gravao de arquivos em
outros diretrios, podemos incluir o caminho onde se encontra o arquivo ao usarmos o
comando EDIT.

Comando de Execuo e de Encerramento
Neste grupo de comandos, veremos como executar o contedo do SQL Buffer e como
fechar o SQL*Plus.

RUN
Este comando envia o contedo do SQL buffer para o banco de dados e, ao mesmo
tempo, apresenta no vdeo 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 contedo do SQL Buffer para o
banco de dados, porm no apresenta o texto enviado, isto , no lista o SQL Buffer. Esta
a diferena entre o comando RUN e a barra.
Sintaxe 1.08: /(barra)

EXIT / QUIT

Os comandos EXIT e QUIT so equivalentes e tm a finalidade de encerrar a sesso
do SQL*Plus. Isto significa que a conexo com o banco de dados e, simultaneamente, o
prprio programa sero encerrados, e o controle retornado ao Sistema Operacional.
De acordo com a Sintaxe 1.09, observamos que podemos determinar como deve ser
considerado o trmino do programa, isto , com sucesso ou no e com efetivao ou no
das modificaes 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 opes
sublinhadas. O trmino do programa considerado normal e a conexo se encerra tambm
normalmente com COMMIT.
As demais opes indicam a ocorrncia de uma falha na execuo 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 trmino do programa anterior,
para que o prximo comando do arquivo seja executado ou no.
Podemos informar um valor numrico fixo, o valor de uma varivel de substituio
ou o valor de uma varivel BIND (varivel para troca de informaes com um programa
PL/SQL ser vista posteriormente).
A utilizao destes parmetros de encerramento comum em arquivo de comandos.
Desta forma, podemos transferir o valor para o arquivo de comandos a fim de controlar a
execuo do comando seguinte.
A conexo com o banco pode ser encerrada independentemente do tipo de trmino do
SQL*Plus (COMMIT ou ROLLBACK).
Na Figura 1.4 (a seguir), inclumos trs janelas:
A janela da esquerda apresenta um script chamado exsql.sh, contendo a
execuo do SQL*Plus numa linha de comando recebendo como parmetros o
user, passwor e o script a ser executado (@valor). Aps a execuo,
verificamos se o trmino foi normal ou no e adotamos caminhos alternativos.
Foi utilizado o parmetro s indicando que a janela do SQL*Plus no pode ser
aberta, ou seja, indicando execuo em batch.
Na janela da direita, apresentamos o contedo deste script valor: ele encerra o
SQL*Plus com warning.
Na janela inferior, vemos a execuo do script exsql.sh, no qual o trmino do
programa (SQL*Plus) foi anormal e recebemos as mensagens adequadas.

Figura 1.4: Execuo do SQL*Plus em ambiente UNIX ou LINUX

DESCRIBE
Este comando tem a finalidade de apresentar a definio de um objeto criado na
base de dados Oracle. O objeto pode ser uma tabela (table), viso (view), sinnimo
(synonym) especificado ou ainda as especificaes de um procedimento (procedure),
funo (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 informaes de objetos pertencentes ao
usurio que estabeleceu a conexo, objetos de outros usurios (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 descrio da tabela Dual e da rotina Proc.
Listagem 1.09: Describe
SQL>DESC SYS.DUAL

Observe que a Tabela Dual no pertence ao usurio DESENV e sim ao usurio SYS;
por este motivo, estamos informando o schema da tabela. J a procedure Teste pertence ao
usurio DESENV e desta forma no necessrio 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 execuo posterior.

SAVE
Salva o contedo 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 opo de REP[LACE] existem outras opes como CRE[ATE] para criar
o arquivo (se omitir o default). Outra opo o APP[END] para acrescentar no final do
arquivo j existente.

GET
Carrega o contedo 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 no encerrado adequadamente.
Caso o nome do arquivo seja composto das palavras List ou File, seu nome deve ser
mencionado entre aspas.
Caso no desejamos carregar o arquivo no SQL Buffer utilizamos a opo NOLIST.


START
Executa o contedo de um arquivo de comando existente no SO (especificado pelo
usurio) 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 execuo
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 parmetros, um para a coluna Nr_git (numrica) e outro para a
coluna CD_depto (alfanumrica). O valor &1 indica que deve ser feita a substituio pelo
primeiro parmetro passado na linha de comando. Como este valor numrico, no houve
necessidade de ser informado entre aspas simples. O segundo parmetro deveria ser
informado entre aspas simples, pois se tratava de uma string. No exemplo, utilizamos a
comparao com &2 no prprio comando SQL., de tal forma que o valor informado na
linha de comando no 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)

Variveis de Substituio
As variveis de substituio no precisam ser nomes numricos, podemos dar
qualquer nome a elas; porem neste caso, no podem ser utilizadas como parmetro para o
comando Start. Ao executarmos um comando de SQL ou de SQL*Plus contendo uma
referncia a varivel de substituio, o SQL * Plus solicita que o valor da varivel seja
informado. Observe na Listagem 1.14 que, mesmo quando informamos os valores na linha
de comando, estes so ignorados e feita a solicitao dos valores.
Listagem 1.14: Variveis de Substituio
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 varivel de substituio seja concatenado com
outro valor, devemos usar um ponto (.) para separar o valor.
Listagem 1.15: Variveis de Substituio
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 Formatao do SQL * Plus

COLUMN
Especifica o ttulo que aparecer em substituio ao nome de uma coluna. Formata
uma coluna ou uma expresso. Podemos executar esse comando sem coluna identificada
para que ele apresente a formatao existente em vigor no SQL*Plus. Se o executarmos
informando um nome de coluna ou expresso, ele apresentar a formatao em vigor para o
elemento especifico.
Cada uma das opes do comando afetar uma caracterstica da coluna ou
expresso.

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 cabealho e coluna
em cada linha.)
FOLD_B[BEFORE (Associa um carriage return antes (before) do cabealho e
coluna em cada linha.)
FOR[MAT] format (Determina um formato de adio para as colunas numricas e
um tamanho para as demais colunas)
HEAD[ING] text (Determina o cabealho da coluna)
JUS[TIFY] {L[EFT] | C[ENTER] | R[IGHT]} (Justifica o alinhamento para o
cabealho 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 parmetro <varivel> o novo valor desta
coluna toda vez que houver mudana 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 parmetro <varivel> o valor anterior desta
coluna toda vez que houver mudana de valor.)
ON OFF (Habilita ou desabilita os atributos de apresentao para a coluna.)
WRA[PPED] | WOR[D_WARAPPED] | TRU[NCATED] (Determina o controle de
quebra da coluna quando o contedo 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 | Funcionrio 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 formatao).
Nome do
Funcionri 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 relatrio.
Sintaxe 1.17: REF[OOTER] [PAGE] [printspec [text | variable] ...] |
[OFF | ON]


REPHEADER
Substitui e formata um cabealho para o incio de cada relatrio.
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 RELATRIO DE TESTE -
SKIP 2 CENTER RELEASE FORMAT 999999999 SQL.RELEASE -
SKIP 2 CENTER Usurio SQL.USER
SQL>TTITLE RIGHT Pg. format 990 sql.pno
SQL> repfooter page ltima pgina -
SKIP 2 LEFT Do Relatrio
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 ttulo para o incio de cada pgina de relatrio.
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 ttulo de rodap (em cada pgina).
Sintaxe 1.20: BTI[TLE] [printspec [ text| vaiable]...] | [OFF | ON]
Listagem 1.18: Title
SQL> @TTITLE

BREAK
Especifica onde e de que forma a formatao ser aplicada em um relatrio (report)
ou listas de um BREAK definido. Define quais so os elementos de quebra e que ao deve
ser tomada quando ocorrer a mudana de valor (quebra) em cada um deles. Como este
comando no 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 sesso. 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 numerao seqencial dada
para as linhas selecionadas pela restrio presente na clusula Where. Neste caso estamos
solicitando apenas as 8 primeiras linhas a serem mostradas (que atendessem a restrio de
cargo), a restrio feita antes da ordenao.)

COMPUTE
Calcula e imprime linhas de sumrio. Efetua um clculo em relao a um elemento
de quebra. Se desejarmos efetuar um clculo 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 clculo efetuado em
relao 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 Mdias de valores no nulos
COU[NT] Conta total de qualquer tipo de valores no nulos
MAX[IMUN] Valor mximo de um NUMBER, CHAR, VARCHAR2(VARCHAR)
MIN[IMUN] Valor mnimo de um NUMBER, CHAR, VARCHAR2(VARCHAR)
NUM[BER] Conta as linhas
SUM Somatrio de valores no nulos (NUMBER)
VAR[IANCE] Varincia de valores no 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 opo (definio) especificada.
Sintaxe 1.23: CL[EAR] option ...
Tipos de opo:
Breaks - limpa todas as indicaes de quebras definidas no comando Break
Buffer - Limpa o texto do SQL Buffer.
Columns - Limpa todas as especificaes 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 contedo removido
Computes contedo 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 opo para arquivo default LST no windows. Dependendo do SO esse valor
poder variar.
OFF - interrompe a gerao do Arquivo
OUT - Interrompe a gerao 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 informaes sobre o elemento especificado.
Mostra o valor de uma varivel ou uma varivel de ambiente SQL*Plus.
Sintaxe 1.25: SHO[W] option

Dentre os parmetros do comando Show apresentados na sintaxe, temos alguns
ainda no utilizados nos comandos anteriores. So eles:
<varivel> - Apenas informaes sobre a varivel de sistema nomeada no comando;
ALL - Apresenta informaes sobre todas as variveis de sistema
BTI[TLE]
ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY |
TRIGGER \ VIEW} [schema.] name] - Apresenta informaes sobre os erros ocorridos em
uma compilao no ltimo comando de PL/SQL ou sobre uma rotina especifica nomeada
no comando.
LABEL - Apresenta informaes sobre os rotolos utilizados
LNO
Parametros - Apresenta informaes sobre os parmetros de inicializao do bando
de dados. uma opo para uso por DBAs.
PNO
REL[EASE]
REPF[OOFETER]
REPH[EADER]
SPOO[L]
SGA - Apresenta a alocao de memria feita para o banco de dados. uma opo
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 prxima instruo
lno 4
pno 2
release 900010101
spool OFF
wrap: linhas sero passado para a linha seguinte
linesize 60
repfooter OFF e NULL
SQL>

COMANDOS PARA CONTOLE DE VARIVEIS DE USURIO
No SQL*Plus, podemos definir dois tipos de variveis de usurio, as variveis de
substituio (j utilizados em diversos scripts) e as variveis Bind para interface com
rotinas de PL/SQL.

DEFINE
Especifica uma varivel de substituio e associa um valor alfanumrico a ela.
Quando este comando executado sem parmetros, o nome e valor de todas as variveis de
substituio so apresentados. Quando informamos o nome de uma varivel , apenas seu
valor apresentado.
Sintaxe 1.26: DEF[INE] [ variable] | [ variable = text]
O valor desta varivel permanece no sistema at que modifiquemos seu valor
atravs de outro comando Define, um comando Accept ou Col com
New_Value/Old_Value, ou ainda faamos a destruio de varivel 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 variveis de substituio definidas pelo comando DEFINE.
Sintaxe 1.27: UNDEF[INE] variable ...
No exemplo da Listagem 1.23, aps a destruio da varivel "dep", a execuo do
comando Select que faz referncia a esta varivel solicita ao usurio que fornea um valor
para "dep", pois esta varivel no 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 varivel 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 varivel criada correspondem aos tipos vlidos em PL/SQL.
Quando utilizamos o coamando Variable sem parmetros, so listadas todas as
variveis Bind Criadas no SQL*Plus.
O exemplo da Listagem 1.24 cria duas variveis 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 varivel cursor, o comando
Select executado e as linhas que atendem condio estabelecida so
selecionadas em uma rea de trabalho endereada pela varivel 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 concludo com sucesso.
SQL> PRINT mat wcursor
MAT
-------------
10
NM_FUNC VL_SAL
--------------------- ---------
CRISTINA 5275
MIGUEL 4125
SANDRA 3825

Quando executamos o comando Print, so apresentados os valores
da varivel "mat" e da rea apontada pela varivel cursor "wcursor".

PRINT
Este comando apresenta o valor de uma varivel do tipo Bind ou de todas as
variveis deste tipo declaradas (se for executado sem argumento).
Sintaxe 1.29: PRI[NT] [variable ...]

Comandos para Comunicao com o Usurio

Os comandos deste tpico apresentam alguma mensagem para o usurio que est
executando scripts no SQL*Plus. Podem ser teis para tornar a interface mais amigvel.

ACCEPT
L uma linha de entrada e armazena estes dados de entrada em uma varivel dada
(indicada) pelo usurio. Cria uma varivel de substituio e , opcionalmente, formata uma
mensagem para o usurio.
Sintaxe 1.30: ACC[EPT] variable [NUM[BER] | CHAR | DATE] [FOR[MAT]
format] [DEF[AULT] default] [PROMPT text [NOPR[OMPT]] [HIDE]

Quando criamos a varivel de substituio com este comando, ela pode ser de tipo
Number, Char ou Date, havendo crtica se o valor informado no for compatvel com o tipo
definido. Os formatos vlidos para uso so os mesmos do comando Col, e ainda so
suportadas os formatos SQL de data quando o tipo da varivel for Date. Podemos informar
um valor default (para o caso de o usurio no formecer nenhum), apresentar uma
mensagem ou no e esconder o valor digitado pelo usurio (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 ADMISSO : "
INFORME A DATA DE ADMISSO :
SQL> DEFINE DATA
DEFINE DATA = "01/01/1998" (CHAR)


PROMPT
Envia uma mensagem especificada ou linha em branco na tela do usurio. 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 paginao.
O SQL*Plus aguarda o usurio 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
execuo.
Listagem 1.26 - Pause
SQL>START PAUSE
SQL>PAUSE "INCIO DA EXECUO"
"INCIO DA EXECUO"

SQL> SELECT NM_FUNC FROM FUNC
2 WHERE CD_MAT = 10;
NM_FUND
------------
CRISTINA

SQL> PROMPT "FIM DE EXECUO"
"FIM DE EXECUO"

Modificando Variveis de Sistema

A modificao das variveis de sistema pode ser feita de duas formas: a primeira,
atravs do comando Set, onde podemos atribuir um valor para a varivel desejada; a
segunda, atravs do menu Opes do SQL*Plus (Definir Opes). Neste caso,
apresentado um dilogo que permite o acesso a cada varivel de sistema com seu valor
atual e permite sua modificao. Este dilogo admite, tambm, a modificao da rea
horizontal e tamanho total do buffer de tela.

SET
Este comando, que pode ser includo em um script, modifica o valor de uma das
variveis de sistema.
Sintaxe 1.33 - Set <varivel> <valor> |
A Tabela 1.1 apresenta a lista de opes a serem configurados e descreve seus
respectivos significados no Sistema do SQL*Plus.
**** Ver Tabela de Configurao *****



Na Listagem 1.27 a seguir, testamos a varivel de sistema Autotrace. Para que ela
possa realizar o relatrio previsto, precisamos criar uma tabela em nosso schema chamada
Plan_Table. O script para criao desta tabela se acha no diretrio
orawin95\rdbms80\admin\utlxplan.sql. A opo Traceonly do comando indica que o
comando de SQL no deve ser executado, apenas a apresentao do plano de acesso e as
estatsticas. Os dois relatrios 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 Execuo
----------------------------------------------------------------


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


Na Listagem 1.28, testamos as variveis Escape, SqlTerminator, SqlPrompt e Time.
A varivel Escape pode ser muito til quando desejamos incluir o & dentro de um texto
sem que ele tenha a funo de varivel de substituio.

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 variveis Serveroutput e Linesize. Para a
varivel Serveroutput, os formatos disponveis so 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 opess 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 apresentao do formato Wrapped. ' ||
5 'Esta opo tambm pode ser Word_wrapped ou Truncated');
6 END LOOP;
7 END;
8 /
Teste de quebra de linha para apresenta
o do formato Wrapped. Esta opo tambm
pode ser Word_wrapped ou Truncated
Teste de quebra de linha para apresenta
o do formato Wrapped. Esta opo tambm
pode ser Word_wrapped ou Truncated
Prodedimento PL/SQL concludo com sucesso.

Se Wrapped informado, a quebra de linha ocorre a cada Linesize caracteres. Se
Word_Wrapped informao, a quebra de linha tambm ocorre, aproximadamente, a cada
Linesize caracteres, porm em final de palavra. Se for utilizado Truncated, cada linha
truncada em Linesize caracteres.

STORE
O comando Store gera um arquivo contendo todas as variveis de sistema e seus
defaults para que possamos gerar um script com aquelas que desejamos alterar.
Quando o SQL*Plus comea 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 diretrio default do
SQL*Plus contendo atribuies a variveis de sistema, ttulos, formatao de colunas;
enfim, todos os padres que quisermos estabelecer para nossa sesso. 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 usurio especificado ao ORACLE.
Sintaxe 1.35: CONN[ECT] [username[ /password] [@database_specification]]

DISCONNECT
Efetua COMMIT nas alteraes pendentes no Banco de Dados e desloga o usurio
corrente, sem sair do SAL*Plus.
Sintaxe 1.36: DISC[ONNECT]

PASSWORD
O comando Password permite que o usurio 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 clusula 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 concludo 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 comentrios dentro de um arquivo de comandos (deve ser colocado
no incio da linha). Inicia comentrio 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 parmetro <user> de forma: <username>[/<password> ] @<espec.do banco de
dados>.


TIMING
Registra dados de tempo para um determinado intervalo. O parmetro
<texto> corresponde ao nome do timer criado. Se executado sem parmetros, lista
a quantidade de timers ativos. A opo Show mostra o valor acumulado para o
timer corrente e a opo 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 informao para o Sistema Operacional. Este tipo de procedimento
interessante quando colocamos a execuo do SQL*Plus em um arquivo de
comandos do SO. O encerramento com um valor permite que o script tome uma ao
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 apresentao (display) para um determinado
atributo de uma coluna Object Type.
Sintaxe 1.45: ATTRIBUTE <tipo> <atribuidor> { Alias <alias> | Clear | Format
<formatao> | Like <tipo> <atrib> / Alias | ON | OFF }
Os formatos vlidos so 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 diretrio <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 execuo de scripts em batch. Esta prtica 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, so apresentadas as seguintes opes:
- S[ilent] - Indica que a execuo ser em batch. No aberta janela para o
SQL*Plus.
<logon> - Indica o logon do usurio (username, password, string de conexo, etc.),
/(barra) ou /Nolog. A /(barra) estabelece conexo no usurio default (Ops$<username do
Sistema Operacional>. A opo /Nolog aciona o SQL*Plus mas no estabelece conexo.
Supe-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 no estiver local, todo o caminho (diretrio) deve ser informado. Adicionamente
podemos passar os parmetros necessrios Execuo do script (veja o comando start e @.
- (menos) - Mostra a sintaxe do SQL*Plus e retorna ao sistema Operacional.
- ? - Mostra a verso corrente do SQL*Plus e retorna ao sistema operacinal. No
deve haver espaco entre o sinal de menos e a interrogao.
- Markup - com esta opo podemos gerar as sadas dos relatrios em formato
HTML se habilitarmos a opo HTML (esta mesma ao pode ser obtida com o comando
SET MARKUP HTML ON). o SQL*PLUS gera pgina complexas contidas nas tags
<html> e <body>. Aopo SPOOL OFF gera sada HTML para ser incluida em uma pgina
web, porm sem a incluso das tags <pre> e </pre>. O texto ao lado Head ser incluido no
arquivo de sada entre as tags <head> e </ pre>. O texto ao lado da opo Head ser
includo no arquivo de sada entre as tags <head> e </head>. O texto associado opo
Body permite a especificao de parmetros para a tab Body. O texto ao lado de Table
permite a especificao permite a especificao de atributos para a tabela tais como
BORDER, CELLPADDING, CELLSPACING E WIDTH. Por default o valor de Width
90% e Border 1. A opo Entmap se receber o valor OFF manter os valores de <,> e
"encontrados nos dados lidos do banco de dados intactos, isto , considerar que as
informaes so pertencentes a textos e HTML. Caso esta opo receba o valor ON, os
textos sero tratados, onde < ser sustitudo por &alt; > ser sustituido por &gt, e ser
sustitudo 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 execuo de um arquivo de nome arqhtm.sql e sada para arquivo em formato HTML.
O segundo grupo de comandos presente na listagem corresponde ao contedo 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. CRIAO 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)
Nm_Func: VARCHAR2(12)
Nm_Sobrenome: VARCHAR2(12)
Cd_Depto: SMALLINT
Nr_Ramal: NUMBER(4)
Dt_Adm: DATE
Nr_Cargo: NUMBER(3)
Nr_Git: NUMBER(2)
In_Sexo: VARCHAR2(1)
Dt_Nasc: DATE
Vl_Sal: INTEGER
Nm_Foto: VARCHAR2(100)
Depto
Cd_Depto: SMALLINT
Nm_Depto: VARCHAR2(40)
Cd_Gerente: NUMBER(5)
Cd_Depto_Ctb: SMALLINT
Proj
Cd_Proj: SMALLINT
Nm_Proj: VARCHAR2(30)
Cd_Depto: SMALLINT
Cd_Resp: NUMBER(5)
Qt_Eqp: NUMBER(2)
Dt_Ini: DATE
Dt_Fim: DATE
PrjAtv
Cd_Proj: SMALLINT
Cd_Ativ: NUMBER(3)
Dt_Ini: DATE
Dt_Fim: DATE
Ativ
Cd_Ativ: NUMBER(3)
Nm_Sigla: VARCHAR2(12)
Tx_Descricao: VARCHAR2(30)

Figura 2.1: Modelo Fsico Relacional de Entidade e Relacionamento

A tabela Funcionrio (Func) tem como chave primria (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 primria (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 primria (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 primria (PK) a coluna Cd_Ativ e no
possui relacionamentos com outras tabelas.
Finalmente, a Tabela Projeto-Atividades (PrjAtv) tem como chave primria (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 necessrias
para a criao da base de dados a ser usada nos exerccios 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 execuo, no entanto, deve ser respeitada.
Todos arquivos devem ser criados em um mesmo diretrio. Escolhemos defini-los
no diretrio 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 sero removidas, o que permite que re-
executemos as mesmas operaes diversas e faamos a implementao do modelo
novamente; portanto, no 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 no 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 especificao fsica da tabela Depto. Observe que foram
fornecidos parmetros fsicos 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 criao 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 criao da Tabela Ativ apresenta como particularidade a expresso Organization
Index, indicando que no haver estruturas separadas para os dados e a PK. Ser construda
uma nica estrutura B*tree contendo o ndice e na mesma linha os dados correspondentes.
Essa tabela no possui Rowid fsico e sim lgico. 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 no se acha presente no modelo. Ela tem
as colunas Cd_Mat e Cd_Depto mas no estabelece relacionamento com as tabelas Func e
Depto. Essa tabela tem a finalidade de armazenar informaes histricas da empresa que
podem no mais estar cadastradas nas tabelas dirias. Usaremos suas informaes para teste
de tabelas particionadas.
Observe que ela possui uma clusula Partition By Range, indicando que,
fisicamente, esta tabela est subdividida em quatro partes e que, logicamente, se trata de
uma nica tabela. O Oracle responsvel por adicionar ou pesquisar as informaes na
partio 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 esto 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 Histrico.
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, NO 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 atualizaes
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 diretrio onde voc instalou os
arquivos para a criao 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. Estabelea conexo
com o usurio criado no incio deste captulo (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 sero executados instalando a base de dados relacional.

Você também pode gostar