Escolar Documentos
Profissional Documentos
Cultura Documentos
com/dariosandrade
I - INTRODUO
Definir e alterar a estrutura de um banco de dados; Consultar, inserir, alterar ou remover informaes de um banco de
dados;
Gerar relatrios a partir de consultas; Gerenciar a segurana e o desempenho de um banco de dados. Conhecer os princpios e terminologias da tecnologia Relacional. Utilizar blocos de linguagem PL/SQL. Realizar transaes com PL/SQL.
um conjunto de informaes armazenadas de forma organizada. No tradicional sistema manual, as informaes geralmente so armazenadas em arquivos de papis. Para recuperar as informaes armazenadas, algum tipo de procura manual necessria. J nos sistemas de armazenamento digitalizados, os dados so armazenados em fitas magnticas ou discos rgidos e o acesso aos dados feito atravs de softwares de computador. Por qu utilizar sistemas de computadores para armazenar informaes em Banco de Dados? Muitas vantagens surgem com a utilizao de sistemas de informaes baseados em computadores como:
Recuperao e atualizao das informaes; Armazenamento das informaes em menor espao do que no sistema
manual;
Controle de redundncia das informaes; Incompatibilidade de dados podem ser previstos; Forar utilizao de padronizaes; Controle de acesso e integridade (segurana).
Para controlar o acesso e armazenamento de informaes necessrio a utilizao de um Sistema de Gerenciamento de Banco de Dados (DBMS). Um DBMS um software que gerencia os pedidos dos usurios para acesso s informaes, um DBMS tambm controla o armazenamento, a recuperao e a modificao dos dados de interesse dos usurios. O DBMS atua como interface entre o armazenamento fsico dos dados e os usurios. Quando um usurio efetua um pedido de acesso, o DBMS intercepta este pedido e executa as operaes necessrias no Banco de Dados. Portanto, o DBMS protege os usurios do Banco de Dados dos detalhes tcnicos dos equipamentos, da estrutura de armazenamento e da estratgia de acesso. Quando um usurio envia uma solicitao ao DBMS, este intercepta a solicitao, interpreta e realiza as operaes necessrias no banco de dados. Vrias alternativas existem para implementar um DBMS. Os tipos mais utilizados so:
Os vrios Banco de Dados que tm sido desenvolvidos recentemente so Relacionais. O Sistema de Gerenciamento de Banco de Dados da ORACLE relacional. Por essa razo, ns estaremos nos concentrando unicamente no acesso relacional ao Gerenciador de banco de dados.
O princpio do modelo relacional surgiu em junho de 1970 num artigo publicado que se chamava A Relational Model of Data for Large Shared Data Banks. Este artigo foi escrito por Dr. E.F. Codd. Para os usurios, o Banco de Dados Relacional uma coleo de tabelas bi-dimensionais as quais so de fcil compreenso. Existe quatro conceitos que precisamos entender:
TABELA
Cdigo 1 2 Campo
Linha
Coluna O modelo relacional imita uma parte da matemtica conhecida como lgebra Relacional. Esse processo envolve:
Uma coleo de objetos conhecidos como Relacionamentos; Um conjunto de aes que agem no relacionamento produzindo novos
relacionamentos. Uma relao pode ser vista como uma tabela. A recuperao de dados feita atravs de operaes relacionais sobre estas tabelas.
RELAO Restrio
DESCRIO uma operao que retira e mostra dados de uma relao. possvel mostrar todas as linhas, ou apenas aquelas que respeitem uma determinada condio. Conhecida como subconjunto horizontal.
Projeo
a operao que exibe certas colunas de uma relao e chamada de subconjunto vertical.
Produto
o resultado de quando linhas de dois conjuntos de dados so concatenados. Todas as linhas do primeiro conjunto so concatenados com as do segundo. Produtos cartesianos produzem muitas linhas.
Juno (join)
o resultado obtido quando dois conjuntos de dados so concatenados de acordo com uma determinada condio.
Unio
Interseco
Diferena
UNION
INTERSECTION
DIFFERENCE
PRODUTO Pedro Joao Ricardo P R O D Vendedor Gerente Pedro = Pedro Joao Joao Ricardo Ricardo Vendedor Gerente Vendedor Gerente Vendedor Gerente
JOIN
10 10 20 30
J O I N
10 20 30 40
Um banco de dados relacional apresenta-se como colees de relaes (tabelas) ao usurio. O formato linha/coluna de uma tabela a maneira usual de visualizar os dados. Existe um conjunto de operadores para particionar e combinar colees de dados (seleo, projeo, produto, join, unio, interseo, diferena). No pode haver ponteiros explcitos. Conexes so realizadas baseadas puramente em dados. A linguagem utilizada para pesquisa base de dados no-procedural e parecida com o ingls. O usurio no precisa informar a rota de acesso ao dado e tambm no precisa saber como os dados esto armazenados fisicamente. Todos comandos para manuseio dos dados so contemplados pela linguagem SQL. H uma total independncia dos dados.
No pode haver linhas duplicadas; No h colunas com nomes duplicados; A ordem de uma linha insignificante; Valores so atmicos, no se decompem.
SQL
ORACLE KERNEL
O RDBMS ORACLE o produto principal da Oracle Corporation. Ele inclui um gerenciador de banco de dados e diversas ferramentas para auxiliar os usurios e o administrador do banco de dados - gerentes de sistema - a manter, monitorar e utilizar os dados. O ncleo do RDBMS o kernel o qual efetua as seguintes tarefas:
Gerenciar a armazenagem e definio dos dados; Controlar e restringir o acesso e concorrncia aos dados; Permitir back-up e recuperao de dados; Interpretar SQL.
Os comandos SQL so utilizados pelos programadores e usurios para acessar os dados num Banco de Dados ORACLE. Os programas aplicativos e as ferramentas ORACLE freqentemente permite aos usurios acessarem dados no banco de dados sem diretamente utilizar SQL, mas essas aplicaes devem tambm utilizar SQL quando executar seus pedidos de acesso. Portanto o banco de dados pode ser acessado unicamente utilizando SQL. Uma parte do Kernel o otimizador. O otimizador examina rotas de acesso para resolver e otimizar solicitaes de um comando SQL. A ORACLE oferece uma variedade adicional de ferramentas para acessar os dados no Banco de Dados.
10
I.9 - SQL
Um sistema gerenciador de banco de dados necessita de uma linguagem de consulta para permitir que o usurio acesse os dados. Structured Query Language (SQL - pronuncia-se sequel) a linguagem adotada pela maioria dos bancos relacionais. O SQL foi desenvolvido em um prottipo de sistema de banco de dados relacionais - sistema R - da IBM no meio dos anos 70. Em 1979, a Oracle lanou o primeiro banco de dados relacional comercial que se utilizava de SQL.
11
SQL uma linguagem English-like. Ela utiliza palavras como select, insert, delete como parte de seu conjunto de comandos. SQL no uma linguagem procedural. Voc identifica quais informaes voc precisa e no como busc-las. Em outras palavras, a linguagem SQL no requer que voc especifique o mtodo de acesso aos dados. Todos os comandos SQL utilizam o otimizador - parte do kernel do RDBMS - para determinar a maneira mais rpida de recuperar os dados. SQL processa conjuntos de registros ao invs de um nico registro por vez. A mais comum forma de conjunto uma tabela. SQL pode ser usado por um conjunto de usurios incluindo DBAs, programadores, gerentes de pessoal e muitos outros grupos de usurios. SQL contm comandos que efetuam uma variedade de tarefas como: Consulta aos dados. Inserir, atualizar e remover linhas de uma tabela. Criar, modificar e remover objetos do Banco de Dados. Controlar o acesso ao Banco de Dados e seus objetos. Garantir a consistncia do Banco de Dados.
12
SQL*PLUS uma interface pela qual pode-se entrar e executar comandos SQL. Existe vrios comandos de SQL*PLUS os quais podem facilitar processos e formatar resultados de comandos de SQL, podendo edit-los e at grav-los. a interface bsica para manipulaes genricas de um banco de dados ORACLE.
SQL*PLUS SQL +
comandos de controle
Parmetros de controle de Formatao
DB ORACLE
Caractersticas principais: Interpretador de comandos SQL; Possui extenses para formatao de relatrios.
13
I.12 - PL/SQL
Desde a verso 6 do ORACLE, foi introduzido uma opo no RDBMS chamada PL/SQL (Procedural Language for SQL). PL/SQL aumenta a capacidade do SQL oferecendo blocos de construtores procedimentais combinados com a capacidade de manipulao de dados de forma no procedimental do SQL. As principais caractersiticas do PL/SQL so:
Declarao de variveis. Atribuies ( X := Y + Z). Controles condicionais ( IF, THEN, ELSE, ELSIF, GO TO). Repeties de comandos - looping ( FOR, WHILE, EXIT, WHEN). Gerenciamento de excees. Aumenta a performance (operaes processadas junto aos dados). Aumenta produtividade.
O PL/SQL oferece:
Aumento de Performance
Quando voc utiliza SQL, seus comandos so enviados e processados pelo RDBMS um por vez, enquanto um bloco de comandos PL/SQL que contm um nmero de comandos SQL combinados com construtores PL/SQL so enviados e processados pelo RDBMS uma nica vez. Esta caracterstica aumenta a performance especialmente em sistemas cliente/servidor. Comandos PL/SQL so tratados pela engine PL/SQL que faz parte do Kernel, ou parte das ferramentas ORACLE. Comandos SQL so executados pelo executor de SQL do Kernel.
Aumento de Produtividade
Drio S. Andrade PG.
14
PL/SQL adiciona o poder do processamento procedural no desenvolvimento de aplicativos. Adicionalmente aplicativos escritos em PL/SQL so portveis para qualquer computador ou sistema operacional que execute o ORACLE RDBMS. O PL/SQL deve ser visto como uma tecnologia e no como um produto externo ao RDBMS.
15
Bloco PL/SQL DECLARE PROCEDURAL PROCEDURAL BEGIN PROCEDURAL SQL PROCEDURAL SQL END
ORACLE RDBMS Mecanismo Bloco PL/SQL DECLARE PROCEDURAL PROCEDURAL BEGIN PROCEDURAL SQL PROCEDURAL SQL END SQL Statement Executor
16
SELECT
Este o comando mais utilizado, ele utilizado para recuperar dados do banco de dados.
Estes comandos so utilizados para entrar com novas linhas, alterar as linhas j existentes e remove-ls das tabelas em um especfico Banco de Dados. So tambm conhecidos como comandos DML (Data Manipulation Language).
CREATE/ALTER/DROP
Estes comandos so utilizados dinamicamente para configurar (criar, alterar e remover) estrutura de dados. So tambm conhecidos como comandos DDL (Data Definition Language).
GRANT/REVOKE
Estes comandos so utilizados para controlar as permisses de acesso ao Banco de Dados e seus objetos.
Nota : Existem mais comandos SQL os quais esto referenciados no SQL*PLUS, Reference Guide.
17
18
II.1 - CONTEDOS
1. Ativao do SQL*Plus
2. Criao de tabelas
3. Manipulao de tabelas
4. Formatao de relatrios
5. Edio de comandos
6. Outros comandos
19
$ sqlplus <ENTER> SQL*Plus: Release 3.1.1.9.1 - Production on Wed Apr 3 08:56 Copyright (c) ORACLE Corporation 1979, 1992, All Enter user-name: oral1 Enter password: _________ a senha no exibida Connected to: ORACLE7 Server Release 7.0.12.1.0 - Production With the procedural option PL/SQL Release 2.0.14.0.1 - Production SQL>
ou
a senha exibida
$ sqlplus ora1/senha1 SQL*Plus: Release 3.1.1.9.1 - Production on Wed Apr 3 08:56 Copyright (c) ORACLE Corporation 1979,1992. All Connected to: ORACLE7 Server Release 7.0.12.1.0 - Production With the procedural option PL/SQL Release 2.0.14.0.1 - Production SQL> Para sair do sql*plus, digite: SQL> exit
20
Quando escrevemos comandos SQL, importante relembrar algumas pequenas regras e diretrizes para construir comandos vlidos como: Comandos SQL podem estar em uma ou mais linhas. Usualmente, as clusulas so escritas em linhas separadas. Tabulao pode ser utilizada. Palavras reservadas SQL no podem ser quebradas entre linhas. Os comandos SQL podem ser escritos em maisculo ou minsculo. Quando um comando SQL entrado, as subsequentes linhas so numeradas. Este o buffer do SQL. Somente um comando pode estar contido no SQL buffer. Este comando pode ser executado das seguintes formas: Colocando ; no final. Colocando ; ou / na ltima linha. Colocando / no prompt do SQL. Executando o comando RUN no prompt do SQL.
21
22
Nome da coluna
Coluna
Linha ou (registro)
EMP 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934
ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK
MGR 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782
HIREDATE 17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-APR-87 17-NOV-81 08-SEP-81 23-MAY-87 03-DEC-81 03-DEC-81 23-JAN-82
SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300
DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10
Campos
23
SQL> CREATE TABLE emp ( 2 empno number(4) not null, 3 ename char(10), 4 job char(10), 5 mgr number(4), 6 hiredate date, 7 sal number(10,2), 8 comm number(10,2), 9 deptno number(2));
; executa o comando
somente o cabealho
EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
24
II.5 - INCLUINDO NOVAS LINHAS EM UMA TABELA O comando INSERT usado para inserir linhas em uma tabela. Sintaxe:
INSERT INTO schema. table View
@dblink
expr
Onde: schema o schema contendo a tabela ou viso. Se voc omitir o eschema, o Oracle assume a tabela ou viso como seu prprio dono. o nome da tabela no qual as linhas sero inseridas. Se voc especificar uma viso, o Oralce insere linhas na tabela que a viso baseia-se. o nome completo ou parcial de um link de banco de dados para um banco de dados remoto onde a tabela ou viso est localizada. Se voc omitir dblink, o Oracle assume que a tabela ou viso est em um banco de dados local. uma coluna da tabela ou viso. Na linha inserida, cada coluna nesta lista est atribuda a um valor na clusula VALUES ou a subconsulta. Especifica uma linha de valores a serem inseridos na tabela ou viso. uma sub-consulta que retorna linhas que so inseridas na tabela. A lista selecionada desta consulta tem que ter o mesmo nmero de colunas da lista do comando INSERT.
table, view
dblink
column
VALUES subsquery_2
25
Caracteres e datas devem sempre estar entre aspas simples. Para voc inserir linhas em uma tabela, a tabela tem que ser sua ou voc tem que ter privilgios sobre ela. O privilgio de sistema INSERT ANY TABLE tambm permite a voc inserir linhas em qualquer tabela de qualquer usurio. Para inserir informaes na tabela EMP.
SQL> INSERT INTO emp VALUES 2 (7369, SMITH, CLERCK, 7902, 3 17-DEC-80, 800, NULL, 20); SQL> INSERT INTO emp VALUES 2 (7566, JONES, MANAGER, 7839, 02-APR-81, 3 2975, NULL, 20);
COMM
DEPTN O 20 20
SQL> INSERT INTO emp 2 (ename, empno, job, mgr, hiredate, sal, deptno) 3 VALUES (SAMANTA, 103, ANALISTA, 110, sysdate-30, 4 1500, 20); ou SQL> 2 3 INSERT INTO emp VALUES (103, SANTANA, ANALISTA, 110, sysdate-30, 15000, NULL, 20);
possvel incluir uma nova linha com valores atribudos para cada coluna, neste caso os nomes das colunas podem ser omitidos. Recomenda-se que a lista de colunas seja sempre especificada.
26
O comando abaixo insere um registro na tabela dept. INSERT INTO dept (deptno, dname, loc) VALUES (99,Financeiro, Curitiba);
O exemplo abaixo insere um linha na tabela DEPT. INSERT INTO dept VALUES (50, PRODUCAO, MARINGA)
O exemplo abaixo insere uma linha com seis colunas na tabela EMP. Uma dessas colunas est atribuda com valor nulo e outra est atribuda com notao cientfica. INSERT INTO emp (empno, ename, job, sal, comm, deptno) VALUES (7890, JINKS, CLERK, 1.2E3, NULL, 40)
O comando abaixo inclue uma coluna de cada vez. Utilizando variveis para substituio, possvel aumentar a velocidade de entrada de informaes. INSERT INTO dept (deptno, dname, loc) VALUES (&dept_num, &dept_nome, &localizacao);
Quando este comando for executado, os valores para as variveis sero pedidos. Exemplo: SQL> INSERT INTO salgrade (losal, hisal, grade) 2 SELECT min(sal), max(sal), substr(sal, 1,1) 3 FROM emp 4 GROUP BY substr(sal, 1,1);
INSERT
INTO func_dept_10 (empno, ename, sal, job, hiredate) SELECT empno, ename, sal, job, hiredate FROM emp WHERE deptno = 10;
27
O comando UPDATE usado para alterar valores j armazenados em tabelas. Para voc atualizar linhas em uma tabela, a tabela tem que ser sua ou voc tem que ter privilgios sobre ela. O privilgio de sistema UPDATE ANY TABLE tambm permite a voc alterar linhas em qualquer tabela de qualquer usurio. Sintaxe:
UPDATE , table schema. View snapshot ( subquery_1 , , SET ( column ) = column = ( subquery_2 ) expr ( subquery_3 ) ) @dblink t_alias
WHERE condio
28
Onde: schema o schema contendo a tabela ou viso. Se voc omitir o schema, o Oracle assume a tabela ou viso como seu prprio dono. o nome da tabela no qual est sendo atualizada. Se voc especificar uma viso, o Oralce atualiza na tabela que a viso baseiase. o nome completo ou parcial de um link de banco de dados para um banco de dados remoto onde a tabela ou viso est localizada. Se voc omitir dblink, o Oracle assume que a tabela ou viso est em um banco de dados local. um nome diferente para a tabela, viso ou subconsulta para ser referenciada no comando. uma subconsulta que o oracle trata da mesma maneira que uma viso. o nome de uma coluna para a tabela ou viso que est sendo atualizada. Se voc omitir a coluna da tabela na clusula SET, o valor da coluna permanece inalterado. o novo valor atribudo a coluna correspondente. uma subconsulta que retorna novos valores que so atribudos para colunas correspondentes. uma subconsulta que retorna um novo valor que est atribudo a coluna correspondente. restrio para atualizar as linhas. Se essa clusula for omitida, o Oracle atualiza todas as linhas na tabela ou viso.
table, view
dblink
alias
subquery_1 column
expr subquery_2
subquery_3
where
29
O comando abaixo fornece ao SCOTT a profisso de VENDEDOR e um aumento de salrio de 10%. UPDATE emp SET job = VENDEDOR, sal = sal * 1.1 WHERE ename = SCOTT;
O exemplo abaixo transforma para nulo as comisses de todos os empregados que tenham como cargo SALESMAN. UPDATE emp SET comm = NULL WHERE job = SALESMAN;
Para colocar R$1000,00 de comisso para o funcionrio de nmero 7499. SQL> UPDATE emp 2 SET comm = 1000 3 WHERE empno = 7499; Para dobrar o salrio de todos empregados do departamento 20 e transfer-los para o departamento 30. SQL> UPDATE emp 2 SET sal = 2 * sal, deptno = 30 3 WHERE deptno = 20; Para atualizar o salrio do funcionrio 7902; EMPNO 7902 ENAME FORD SAL 3000
SQL> UPDATE emp 2 SET sal = 3500 3 WHERE empno = 7902; EMPNO 7902 ENAME FORD SAL 3500
30
Para dar 10% de aumento para os funcionrios que trabalham no departamento 10.
SQL> UPDATE emp 2 SET sal = sal*1.10 3 WHERE deptno = 10; O comando abaixo promove JONES a gerente do departamento 20 com um salrio de R$ 1000,00. (Assumindo que tenha somente um Jones).
SQL> 2 3
UPDATE emp SET job = MANAGER, sal = sal + 1000, deptno = 20 WHERE ename = JONES;
31
WHERE condio
Onde: schema o schema contendo a tabela ou viso. Se voc omitir o schema, o Oracle assume a tabela ou viso como seu prprio dono. o nome da tabela no qual est sendo apagado as linhas. Se voc especificar uma viso, o Oralce apaga linhas da tabela que a viso baseia-se. o nome completo ou parcial de um link de banco de dados com um banco de dados remoto onde a tabela ou viso est localizada. Se voc omitir o dblink o Oracle7 assume que a tabela ou viso est localizada em um banco de dados local. uma sub-consulta no qual os dados so selecionados para serem apagados. O Oracle executa uma subconsulta e usa o resultado das linhas como uma tabela na clusula FROM. apaga somente linhas que satisfaam a condio. A condio pode referenciar a tabela e pode conter uma sub-consulta.
table, view
dblink
subquery
WHERE
Para voc apagar linhas em uma tabela, a tabela tem que ser sua ou voc tem que ter privilgios sobre ela. O privilgio de sistema DELETE ANY TABLE tambm permite a voc apagar linhas em qualquer tabela de qualquer usurio.
Drio S. Andrade PG.
32
Para remover o empregado de nmero 7369. SQL> DELETE FROM emp WHERE empno = 7369; Para remover todos os empregados do departamento 20. SQL> DELETE FROM emp WHERE deptno = 20; Para remover todos os empregados. SQL> DELETE from emp; Para remover o empregado de nmero 7934: SQL> DELETE FROM emp 2 WHERE empno = 7934; Para remover todos os empregados admitidos a partir de 1989: SQL> DELETE FROM emp 2 WHERE hiredate >= 01-JAN-89; O comando abaixo apaga todos empregados da tabela EMP que tenham profisso SALESMAN e comisso menor do que R$100,00. SQL> DELETE FROM emp 2 WHERE job = SALESMAN 3 AND comm < 100;
33
>> tabela
Observaes:
O comando TRUNCATE no dispara os gatilhos de deleo. No possvel executar o comando TRUNCATE sobre uma tabela
referenciada por outra qualquer. Exemplos:
34
O ltimo comando SQL (no SQL*Plus) fica armazenado no buffer de edio do SQL*Plus. Para listar o contedo do buffer: SQL> list ou SQL> l 1 SELECT 2 empno, ename 3 FROM emp 4* WHERE empno = 7902
* indica a linha corrente qualquer um desses comandos pode ser utilizado
Para apagar a linha corrente SQL> del SQL> l 1 SELECT 2 empno, ename 3* FROM emp
35
Para inserir linhas aps a linha corrente: SQL> list 2 2* empno, ename SQL> imput ou SQL> list 3 job, 4 sal 5 SQL> list 1 SELECT 2 empno, ename 3 job, 4 sal 5* FROM emp;
deixe um linha em branco para terminar a insero
Para acrescentar caracteres no fim da linha corrente: SQL> 2* SQL> ou SQL> SQL> 1 2 3 4 5* list 2 empno, ename append, mgr, a, mgr, list SELELCT empno, ename, mgr, job, sal FROM emp;
36
Para substituir caracteres da linha corrente: SQL> list 2 2* empno, ename, mgr, SQL> change/mgr/sal/ ou SQL> c/mgr/sal/ SQL> list 1 SELECT 2 empno, ename, sal, 3 job, 4 sal 5* FROM emp
Para executar o comando existente no buffer: SQL> run ou SQL> r ou SQL> / O SQL*Plus permite a utilizao de outros buffers alm do buffer de comandos SQL. Para ativar um buffer chamado TESTE, por exemplo: SQL> set buffer teste Para saber qual o buffer corrente: SQL> show buffer buffer TESTE
37
Para modificar o contedo do buffer corrente com um editor externo: SQL> edit O editor externo pode ser especificado pelo usurio da seguinte forma: SQL> define _editor = vi Para salvar o buffer corrente num arquivo do Sistema Operacional: SQL> save arquivo
nome do arquivo; a extenso .sql acrescentada automaticamente
Para recuperar um comando SQL armazenado num arquivo: SQL> get arquivo Para remover o contedo do buffer corrente: SQL> clear buffer Para executar uma seqncia de comandos (SQL ou SQL*Plus) armazenada num arquivo: SQL> start arquivo ou SQL> @arquivo Para editar um arquivo qualquer do sistema operacional: SQL> edit ex21
assumida a extenso .sql
38
Para executar um comando qualquer do sistema operacional: SQL> host is - al ou SQL> ! Is - al total 20 drwxr-xr-x 2 drwxr-xr-x 3 -rw-rr1 -rw-rr1 -rw-rr1 -rw-rr1 -rw-rr1 curso curso curso curso curso curso curso oracle oracle oracle oracle oracle oracle oracle 128 1024 800 838 1152 1616 1796 Jan 3 Jan 3 Jan 3 Jan 3 Jan 3 Jan 3 Jan 3 18:02 17:59 17:59 17:59 18:01 18:01 18:01 . .. ex21.sql ex22.sql ex23.sql ex24.sql ex25.sql
Para obter ajuda sobre um comando SQL ou SQL*Plus: SQL> help select
nome do comando
39
II.11 - EXERCCIOS
1. Crie uma tabela chamado ALUNO com as seguintes colunas: NOME ENDER CIDADE ESTADO CEP ANIVERSRIO CHAR(30) NOT NULL CHAR(50) CHAR(25) CHAR(2) NUMBER(5) DATE
2. Insira dados sobre voc e algum membro da sua famlia na tabela ALUNO.
5. Salve o comando anterior no arquivo ex24.sql, saia do SQL*Plus, entre novamente e execute o comando contido no arquivo gerado.
40
41
III.1 - CONTEDO
1. Seleo de colunas
2. Uso de expresses
3. Ordenao de resultados
4. Agrupamento
5. Operaes de conjunto
6. Juno de tabelas
42
A sentena do comando SELECT recupera as informaes do Banco de Dados implementando todos os operadores da lgebra Relacional. Uma pesquisa simples deve conter:
43
Sintaxe:
SELECT DISTINCT ALL schema. expr c_alias AS , FROM schema. table View snapshot @dblink t_alias WHERE condio * , table View snapshot .*
CONNECT BY condio
UNION
comando SELECT
44
Onde: DISTINCT ALL * table.*, view.*, snapshot.* retorna somente uma cpia de cada linha selecionada que for duplicada. retorna todas as linhas selecionadas, incluindo as duplicadas. O default ALL. select todas as colunas de todas as tabelas. seleciona todas as colunas da tabela, viso ou snapshot. Voc pode usar o schema para selecionar de uma tabela, viso ou snapshot em um outro schema. seleciona uma expresso. prov um nome diferente para a coluna. o schema contendo a tabela, viso ou snapshot. Se voc omitir o schema, o Oracle assume a tabela, viso ou snapshot como seu prprio dono. o nome da tabela, viso ou snapshot no qual est sendo selecionado. o nome completo ou parcial para um link de banco de dados com um banco de dados remoto onde a tabela, viso ou snapshot est localizada. prov um nome diferente para a tabela, viso ou snapshot ou subconsulta. restringe as linhas selecionadas. Se voc omitir esta clusula, o Oracle retorna todas as linhas da tabela, viso ou snapshot. retorna linhas em uma ordem hierrquica. funo de grupo restringe os grupos de cada linha retornada no GROUP BY. combina as linhas retornadas por dois comandos SELECT usando uma operao de funo.
t_alias WHERE
START WITH, CONNECT BY GROUP BY HAVING UNION, UNION ALL, INTERSECT, MINUS
45
ORDER BY
ordena as linhas retornadas por um comando. Expr ordena linhas baseadas no valor de expr. A expresso baseada em colunas na lista selecionada ou colunas em tabelas, vises ou snapshots na clusula FROM. Position ordena linhas baseado em seus valores para a expresso na posio da lista selecionada. ASC, DESC especifica a ordenao ascendente ou descendente. O opo ASC default.
O comando abaixo mostra o nmero do departamento, nome e nmero do patro da tabela EMP. SELECT deptno, ename, mgr FROM emp;
DEPTNO ----------10 30 30 20 30 10 20 10 30 20 30 20 10
ENAME ------------------------SMITH ALLEN WARD JONES BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
MGR -----------7902 7698 7698 7839 7839 7839 7566 7698 7788 7698 7566 7782
46
EMP 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934
ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK
MGR 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782
HIREDATE 17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-APR-87 17-NOV-81 08-SEP-81 23-MAY-87 03-DEC-81 03-DEC-81 23-JAN-82
SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300
DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10
O comando abaixo seleciona linhas dos empregados que trabalham no departamento 30. SQL> SELECT * 2 FROM emp 3 WHERE deptno = 30; A ordem em que as colunas so especificadas muda a apresentao do resultado: SQL> SELECT ename, empno 2 FROM emp 3 WHERE empno < 7500;
47
Para indicar as colunas a serem recuperadas de uma tabela: SQL> SELECT empno, ename 2 FROM emp 3 WHERE empno < 7500;
48
Os operadores aritmticos so utilizados para dividir valores numricos. Os operadores de maior conforme pode ser observado na tabela seguinte, avaliao dos operadores das expresses. Esta aritmticos na ordem decrescente de precedncia:
somar, subtrair, multiplicar e precedncia, os parnteses, permite alterar a ordem de tabela lista os operadores
( )
Alteram as regras de precedncia dos operadores. Os operadores entre os parnteses so avaliados em primeiro lugar. SELECT (2+2) / (2-1) from dual;
+ -
Assinalam uma expresso como positiva ou negativa. SELECT * FROM EMP WHERE COMM = -10 SELECT * FROM EMP WHERE SAL > 1000
* /
+ -
49
ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK
SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300
ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JANES FORD MILLER
12*SAL 9600 19200 15000 35700 15000 34200 29400 36000 60000 18000 13200 11400 36000 15600
50
ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK
SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300
Comprimento Total 10 13 12 12 14 12 12 12 13 14 10 10 11 11
51
Os operadores de caracteres so usados em expresses para manipular strings de caracter. A seguir o nico tipo de operador de caracter:
||
Faz a concatenao de strings de caracteres, ou seja, encadeiam ou ligam duas strings. SELECT O Nome || ename from emp
O resultado da concatenao um valor caracter. As strings de caracteres dos tipos de dados CHAR podem ter o mximo de 255 caracteres. Esta restrio aplica-se tambm s strings de caracteres formadas pela concatenao de duas outras strings.
52
Para saber os nomes dos empregados que trabalham no departamento 20. EMP 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10
53
Para saber o tempo de servio dos funcionrios cuja comisso maior que 50% do salrio: SQL> SELECT ename, 2 months_between(sysdate, hiredate) MESES 3 FROM emp 4 WHERE comm > sal * 0.50;
ENAME MARTIN
MESES 187.5371
54
Os operadores de comparao so usados em condies que comparam duas expresses. Assim como as condies, os resultados das comparaes entre expresses podem ser verdadeiro ou falso. A tabela a seguir lista os operadores de comparao:
()
Alteram as operadores.
regras
de
validao
das
precedncias
dos
Testa a igualdade entre expresses. SELECT * FROM EMP WHERE SAL = 1000;
!= ^= <>
Testam a diferena entre expresses. SELECT * FROM EMP WHERE SAL <> 1000;
>
Testa se uma expresso maior que outra. SELECT * FROM EMP WHERE SAL > 1000
<
Testa se uma expresso menor que outra. SELECT * FROM EMP WHERE SAL < 1000
>=
Testa se uma expresso maior ou igual a outra. SELECT * FROM EMP WHERE SAL >= 1000
<=
Testa se uma expresso menor ou igual a outra. SELECT * FROM EMP WHERE SAL <= 1000
IN
Drio S. Andrade
55
especificados entre parnteses logo aps o operador. Esses membros so strings de caracteres que devem aparecer entre aspas simples e separados por vrgula. O operador equivalente ao operador =ANY. SELECT * FROM EMP WHERE JOB IN (SALESMAN,CLERK)
NOT IN
Valida a expresso como falsa se algum membro que segue o operador nulo. Esses membros so os valores retornados de uma pesquisa efetuada com SELECT, por exemplo. equivalente a != ALL. Todas as linhas sero avaliadas como falso se qualquer membro da lista de valores referenciada pelo operador NOT IN for nulo. SELECT * FROM EMP WHERE JOB NOT IN (SALESMAN,CLERK)
Validam uma expresso como sendo maior ou igual ao valor que segue BETWEEN e menor ou igual ao valor que segue AND.
NOT LIKE
Este operador usado para comparar duas strings de caracteres e verificar se elas so parecidas. Podem ser utilizados caracteres % e _ . O caracter percentual (%) utilizado para comparar um ou mesmo nenhum caracter, entretanto no pode comparar um valor nulo. O caracter sublinhado (_) utilizado para comparar exatamente um caracter. Funo UPPER: utilizada para fazer com que as expresses sejam avaliadas corretamente comparando letras minsculas e maisculas. ... SELECT SAL FROM EMP
IS NOT NULL
Este operador deve ser usado quando for necessrio testar uma condio para verificar se ela nula ou no. ... WHERE X IS NOT NULL
56
Os operadores lgicos so usados para afetar o resultado de mltiplas condies. O operador AND requer que a linha satisfaa todas as duas condies comparadas. Pr sua vez, o operador OR requer que a linha satisfaa pelo menos uma das duas condies comparadas. SELECT * FROM emp WHERE (hiredate < 01-JAN-93 ) AND (sal < 1000) O comando select abaixo mostra o nome, cargo, salrio e departamento de todos os empregados, exceto os que possuem cargo SALESMAN e trabalham no departamento 10. SELECT ename, job, sal, deptno FROM EMP WHERE NOT(job = SALESMAN AND deptno = 30)
57
(+)
Indica que a coluna precedida pelo sinal (+) est relacionada coluna anterior da declarao e faz parte de outra tabela. Este operador utilizado para especificar os relacionamentos entre as colunas. ...WHERE DEPT.DEPTNO = EMP.DEPTNO (+)
Seleciona todas as colunas das tabelas em uma pesquisa. SELECT * FROM EMP SELECT EMP.* FROM EMP
COUNT(X)
Retorna o nmero de linhas onde a expresso X no nula. SELECT COUNT(DEPTNO) FROM EMP
ALL
Retm os valores duplicados em pesquisas. SELECT ALL * ... COUNT( ALL DEPTNO)
DISTINCT
Elimina as linha duplicadas do resultado de uma pesquisa ou elimina os valores em duplicidade de uma expresso. SELECT DISTINCT * ... COUNT(DISTINCT DEPTNO)
PRIOR
Define a relao entre as colunas das tabelas em uma pesquisa. A expresso que segue o operador PRIOR representa a linha da tabela principal. A outra expresso que se segue anterior representa a linha com a qual se efetua o relacionamento. CONNECT BY PRIOR EMPNO = LEVEL_EBN
58
Voc pode utilizar variveis nos arquivos de comandos ou nos comandos SQL para representar valores que sero entrados em tempo de execuo. Uma varivel comea sempre com o caracter & e sempre temporria. Para definir uma varivel permanente deve-se utilizar &&. Pegar o nmero do departamento em tempo de execuo. SELECT empno, ename, sal FROM emp WHERE deptno = &numero_departamento; Enter value from numero_departamento:
Se a varivel for do tipo caracter, deve-se entrar com a informao entre aspas simples. Exemplo: SELECT ename, sal FROM emp WHERE ename = &nome_do_funcionario;
59
III.10 - ORDENAO DE RESULTADOS Normalmente a ordem das colunas resultantes de uma pesquisa indefinida. A clusula ORDER BY pode ser utilizada para organizar as linhas. Se usada, ela sempre deve ser a ltima clusula da sentena do SELECT.
ASC
Parmetro default, ordena o resultado da pesquisa pelas colunas especificada na ordem ascendente.
DESC
pelas
colunas
O comando abaixo retorna o nome, salrio multiplicado por 12 e nmero do departamento em ordem alfabtica. SELECT ename, job, sal * 12, deptno FROM emp ORDER BY ename; Para listar os funcionrios em ordem alfabtica: SQL> SELECT ename, job, sal 2 FROM emp 3 ORDER BY ename;
ENAME ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD
JOB CLERK SALESMAN MANAGER MANAGER ANALYST CLERK MANAGER PRESIDENT SALESMAN CLERK ANALYST CLERK SALESMAN SALESMAN
SAL 1100 1600 2850 2450 3000 950 2975 5000 1250 1300 3000 800 1500 1250
60
Para listar os empregados em ordem descrescente de salrio, por cargo. SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE job in (ANALYST, SALESMAN, 4 MANAGER) 5 ORDER BY job, sal desc;
ENAME SCOTT FORD JONES BLAKE CLARK ALLEN TURNER WARD MARTIN
JOB ANALYST ANALYST MANAGER MANAGER MANAGER SALESMAN SALESMAN SALESMAN SALESMAN
SAL 3000 3000 2975 2850 2450 1600 1500 1250 1250
Pode-se usar expresses ou referncias posio de expresses no SELECT como argumentos do ORDER BY:
SQL> SELECT ename, job, length(job), sal 2 FROM emp 3 WHERE job in (ANALYST, SALESMAN, 4 MANAGER) 5 ORDER BY 3, sal + nvl(comm,0) desc;
61
A clusula WHERE corresponde ao operador Restriction da lgebra Relacional. Ela contm a condio s quais efetuaro comparaes nas linhas para serem exibidas. A clusula WHERE quando utilizada, deve estar logo aps a clusula FROM. A clusula WHERE pode comparar valores s colunas, valores literais, expresses aritmticas ou funes utilizando os operadores mencionados. O comando abaixo mostra todos os empregados que trabalha no departamento 30. SELECT * FROM emp WHERE deptno = 30; O comando abaixo seleciona o nome, cargo, salrio e nmero do departamento dos empregados, exceto os vendedores que trabalham no departamento 30. SELECT ename, job, sal, deptno FROM emp WHERE not (job = SALESMAN and deptno = 30);
62
A clusula GROUP BY pode ser usada para dividir as linhas de uma tabela em pequenos grupos. Funes de grupos podem ser utilizadas para retornar uma informao sumarizada de cada grupo.
Com essa clusula pode-se tambm agrupar linhas dentro de grupos. SELECT job, deptno, avg(sal) FROM emp GROUP BY deptno, job;
O comando abaixo retorna o menor e maior salrio de cada departamento. SELECT deptno, min(sal), max(sal) FROM emp GROUP BY deptno;
O comando abaixo retorna o menor e maior salrio para os funcionrios que tem como profisso CLERK, por departamento. SELECT deptno, min(sal), max(sal) FROM emp WHERE job = CLERK GROUP BY deptno;
63
Para saber quantos funcionrios trabalham em cada departamento. EMP 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK MGR 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 HIREDATE 17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-APR-87 17-NOV-81 08-SEP-81 23-MAY-87 03-DEC-81 03-DEC-81 23-JAN-82 SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300 COMM 300 500 1400 DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10
coluna do agrupamento
todas as linhas
funo de grupo
DEPTNO 10 20 30
COUNT(*) 3 5 6
64
Se quiser especificar quais grupos sero exibidos, utilize a clusula HAVING. SELECT deptno, avg(sal) FROM emp GROUP BY deptno HAVING count (*) > 3;
recomendado que a clusula GROUP BY venha antes da clusula HAVING. O comando abaixo retorna o menor e maior salrio para os funcionrios que tem como profisso CLERK por departamento, tendo o menor salrio menor do que 1000. SELECT deptno, min(sal), max(sal) FROM emp WHERE job = CLERK GROUP BY deptno HAVING min(sal) < 1000;
65
Para saber a soma dos salrios para os cargos onde a mdia de salrios maior que 1500: EMPNO 7788 7902 7369 7876 7934 7900 7566 7782 7698 7839 7499 7654 7844 7521 ENAME SCOTT FORD SMITH ADAMS MILLER JAMES JONES CLARK BLAKE KING ALLEN MARTIN TURNER WARD JOB ANALYST ANALYST CLERK CLERK CLERK CLERK MANAGER MANAGER MANAGER PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... SAL 3000 3000 800 1100 1300 950 2975 2450 2850 5000 1600 1250 1500 1250 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
AVG AVG
= =
3000 1037.5
AVG
2758.3 333
AVG AVG
= =
5000 1400
SQL> SELECT job, sum(sal), max(sal) 2 FROM emp 3 GROUP BY job 4 HAVING avg(sal) > 1500;
selecione os grupos (where de grupo) funo de grupo
66
Uma tabela pode ser encarada como um conjunto Os elementos do conjunto so as linhas da tabela:
Tabela
Col. 1 A B D
Col. 2 1 1 2
Conjunto
Unio (UNION)
Interseco (INTERSECT)
Diferena (MINUS)
67
Unio
TABELAS
Col1 A B D
Col2 1 1 2
Col1 A B E D
Col2 2 1 2 2
select col1, col2 from tab1 union select col1, col2 from tab2
Col1 A A B D E Col2 1 2 1 2 2
68
Interseco
TABELAS
Col1 A B D
Col2 1 1 2
Col1 A B E D
Col2 2 1 2 2
select col1, col2 from tab1 intersect select col1, col2 from tab2
Col1 B D Col2 1 2
69
Diferena
Col1 A B D
Col2 1 1 2
Col1 A B E D
Col2 2 1 2 2
select col1, col2 from tab1 minus select col1, col2 from tab2
Col1 A Col2 1
70
Um Join uma consulta que combina linhas de duas ou mais tabelas, vises ou snapshots. O Oracle7 executa um join quando mltiplas tabelas aparecem na clusula FROM. A lista selecionada da coluna pode conter qualquer coluna de qualquer tabela. Caso haja colunas com o mesmo nome, voc tem que especificar de qual tabela a determinada coluna. A juno de tabelas corresponde operao de produto cartesiano entre conjuntos:
A, B, C
1,2
col3 B
col1 A
col2 3
col3 B
col4 2
col5 E
71
produto cartesiano
SQL> SELECT ename, dname 2 FROM emp, dept 3 WHRE emp.deptno = dept.deptno;
critrio de seleo da juno para diferenciar colunas de mesmo nome usa-se o nome da tabela como prefixo
ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
DNAME RESEARCH SALES SALES RESEARCH SALES SALES ACCOUNTING RESEARCH ACCOUNTING SALES RESEARCH SALES RESEARCH ACCOUNTING
72
ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
DEPTNO ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES SALES OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS OPERATIONS
EMP.DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10
DEPT.DEPTNO 10 10 10 10 10 10 10 10 10 10 10 10 10 10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 30 30 30 30 30 30 30 30 30 30 30 30 30 40 40 40 40 40 40 40 40 40 40 40 40 40 40
73
GRADE 1 2 3 4 5
SQL> SELECT ename, sal, grade 2 FROM emp, salgrade 3 WHERE sal between losal and hisal;
especifica um tipo de juno
ENAME SMITH ADAMS JAMES WARD MARTIN MILLER ALLEN TURNER JONES BLAKE CLARK SCOTT FORD KING
SAL 800 1100 950 1250 1250 1300 1600 1500 2975 2850 2450 3000 3000 5000
GRADE 1 1 1 2 2 2 3 3 4 4 4 4 4 5
74
SQL> SELECT dname, grade, count(*) 2 FROM emp, dept, salgrade 3 WHERE emp.deptno = dept.deptno and 4 sal between losal and hisal 5 GROUP BY dname, grade 6 HAVING sum(sal) > 1200 7 ORDER BY dname, count(*) DESC;
GRADE 2 4 5 4 1 2 3 4
COUNT(*) 1 1 1 3 2 2 2 1
O comando abaixo retorna o nome e cargo do empregado e o nmero do e nome do departamento SQL> SELECT ename, dept.deptno, dname 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno;
O comando abaixo retorna o nome, cargo e nmero do departamento dos empregados e nome do departamento de todos os funcionrios CLERKS. SQL> SELECT ename, job, dept.deptno, dname 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno 4 AND job = CLERK;
75
III.16 - EXERCCIOS
1. Consulte o nome, o local do departamento, o salrio por hora (assumindo 160 horas/ms) e o total mensal (salrio + comisso) dos vendedores da tabela EMP. Salve seu exerccio no arquivo ex31.sql.
2. Carregue o contedo do arquivo ex31.sql no buffer corrente e modifique-o de forma a ordenar o resultado em ordem descrescente do salrio por hora. Salve seu exerccio novamente, no mesmo arquivo.
4. Obtenha a soma dos salrios dos empregados que no trabalham nos departamentos 10 ou 30.
5. Obtenha o nome e a mdia salarial dos departamentos (exceto o 10), cujo maior salrio seja inferior a 4000.
76
IV - CONSULTAS AVANADAS
77
IV.1 - CONTEDO
1. Pseudo - colunas
2. Juno externa
3. Auto-Juno
4. Consultas encaixadas
5. Consultas hierrquicas
78
IV.2 - PSEUDO-COLUNAS
Pseudo-colunas so colunas que podem ser consultadas em qualquer tabela, como uma coluna normal, mas no podem ser alteradas:
T N N N
R N
Descrio Valor corrente da sequncia nome_seq Prximo valor da sequncia nome_seq Usada no comando SELCT CONNECT BY; igual a 1 para o n raz de uma rvore, 2 para seus filhos e assim por diante Valor nulo Identificao interna de uma linha Nmero que indica a ordem de seqncia da linha selecionada em uma consulta
ROWNUM 1
ROWID 00000984.0001.0001
79
SQL> SELECT dept.deptno, dname, empno, ename 2 FROM dept, emp 3 WHERE dept.deptno = emp.deptno order by dept.deptno;
DEPTNO 10 10 10 20 20 20 20 20 30 30 30 30 30 30
DNAME ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES
EMPNO 7782 7839 7934 7369 7876 7902 7788 7566 7499 7698 7654 7900 7844 7521
ENAME CLARK KING MILLER SMITH ADAMS FORD SCOTT JONES ALLEN BLAKE MARTIN JAMES TURNER WARD
80
ENAME DEPTNO SMITH ACCOUNTING ALLEN ACCOUNTING WARD ACCOUNTING JONES ACCOUNTING MARTIN ACCOUNTING BLAKE ACCOUNTING CLARK ACCOUNTING SCOTT ACCOUNTING KING ACCOUNTING TURNER ACCOUNTING ADAMS ACCOUNTING JAMES ACCOUNTING FORD ACCOUNTING MILLER ACCOUNTING SMITH RESEARCH ALLEN RESEARCH WARD RESEARCH JONES RESEARCH MARTIN RESEARCH BLAKE RESEARCH CLARK RESEARCH SCOTT RESEARCH KING RESEARCH TURNER RESEARCH ADAMS RESEARCH JAMES RESEARCH FORD RESEARCH MILLER RESEARCH SMITH SALES ALLEN SALES WARD SALES JONES SALES MARTIN SALES BLAKE SALES CLARK SALES SCOTT SALES KING SALES TURNER SALES ADAMS SALES JAMES SALES FORD SALES MILLER SALES SMITH OPERATIONS ALLEN OPERATIONS WARD OPERATIONS JONES OPERATIONS MARTIN OPERATIONS BLAKE OPERATIONS CLARK OPERATIONS SCOTT OPERATIONS KING OPERATIONS TURNER OPERATIONS ADAMS OPERATIONS JAMES OPERATIONS FORD OPERATIONS MILLER OPERATIONS No existem empregados no departamento 40
Drio S. Andrade
EMP.DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10 20 30 30 20 30 30 10 20 10 30 20 30 20 10
DEPT.DEPTNO 10 10 10 10 10 10 10 10 10 10 10 10 10 10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 30 30 30 30 30 30 30 30 30 30 30 30 30 40 40 40 40 40 40 40 40 40 40 40 40 40 40
PG.
81
Soluo: fazer de conta que existe uma linha fictcia, totalmente nula, na tabela de empregados, para que ela seja associada linha do departamento 40 (juno externa):
SQL> SELECT dept.deptno, dname, empno, ename 2 FROM dept, emp 3 WHERE dept.deptno = emp.deptno(+);
operador opcional para juno externa
DEPTNO 10 10 10 20 20 20 20 20 30 30 30 30 30 30 40
DNAME ACCOUNTING ACCOUNTING ACCOUNTING RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES SALES SALES SALES SALES OPERATIONS
EMPNO 7782 7839 7934 7369 7876 7902 7788 7566 7499 7698 7654 7900 7844 7521
ENAME CLARK KING MILLER SMITH ADAMS FORD SCOTT JONES ALLEN BLAKE MARTIN JAMES TURNER WARD
SQL> SELECT dept.deptno, dname, loc 2 FROM dept, emp 3 WHERE dept.deptno = emp.deptno(+) and empno is null;
LOC BOSTON
82
As tabelas envolvidas numa juno no precisam ser distintas. Para descobrir quais gerentes esto ganhando menos que o dobro do salrio de algum de seus subordinados:
SQL> SELECT ger.ename gerente, ger.sal, max(2*trab.sal) 2 FROM emp trab, emp ger 3 WHERE trab.mgr = ger.empno 4 GROUP BY ger.ename, ger.sal 5 HAVING max(2*trab.sal) > ger.sal;
SAL MAX(2*TRAB.SAL) 2850 3200 2450 2600 2975 6000 5000 5950
SQL> SELECT e1.ename||TRABALHA PARA|| e2.ename EMPREGADOS 2 FROM emp e1, emp e2 where 3 e1.mgr = e2.empno;
83
Uma subquery um comando SELECT que est contido em um outro comando SELECT. O comando que contm a subconsulta chamado de comando pai. As linhas retornadas pela subconsulta so usadas pelo comando pai. Subqueries podem:
Retornar uma ou mais linhas. Retornar uma ou mais colunas. Utilizar funes de grupos ou GROUP BY. Agrupar tabelas.
Uma sub-consulta pode fazer referncias a colunas do comando no qual ela est encaixada.
SELECT coluna1, coluna2,... FROM tabela WHERE coluna = ( SELECT coluna FROM tabela WHERE condicao )
Para saber quais empregados ganham mais que a mdia dos salrios: SQL> SELECT empno, ename, sal parenteses delimitam a 2 FROM emp sub-consulta 3 WHERE sal > (select avg(sal) from emp);
resultado desta sub-consulta um nico valor
84
Para saber quais funcionrios trabalham com o SCOTT. SQL> SELECT ename, deptno 2 FROM emp 3 WHERE deptno = (SELECT deptno FROM emp where ename = SCOTT);
SQL> SELECT deptno, dname elimina os valores duplicados 2 FROM dept 3 WHERE deptno not in (SELECT distinct deptno FROM emp);
DEPTNO 40
DNAME OPERATONS
Encontre o funcionrio com maior salrio. SELECT ename, job FROM EMP WHERE sal = ( SELECT max(sal) FROM emp);
Encontre os funcionrios com maior salrio em cada departamento. SELECT ename, job, deptno FROM emp WHERE sal IN (SELECT max(sal) FROM emp GROUP BY deptno);
85
Para recuperar os empregados que ganham mais que a mdia de salrio do seu departamento: SQL> SELECT deptno,ename, sal nesse caso necessrio o 2 FROM emp x pseudnimo para a tabela 3 WHERE sal > (SELECT avg(sal) FROM emp y 4 where x.deptno = y.deptno ) 5 ORDER BY deptno;
DEPTNO 10 20 20 20 30 30
Para saber se o resultado de uma sub-consulta vazio ou no equivalente ao IS NOT NULL para colunas: SQL > SELECT ename, job, deptno s importa se uma linha 2 FROM emp x existe ou no 3 WHERE exists (SELECT x from emp y 4 WHERE x.empno = y.mgr)
Sub-consultas tambm podem ser usadas nos comandos de manipulao de dados (INSERT, UPDATE, DELETE). Para eliminar os empregados mais novos de cada departamento: SQL> DELETE FROM emp e 2 WHERE hiredate = (SELECT max(hiredate) FROM emp 3 WHERE deptno = e.deptno);
86
Para que todos os empregados mais novos de cada cargo ganhem o melhor salrio e a mdia das comisses de seu cargo: SQL> UPDATE emp e 2 SET (sal,comm) = (SELECT max(sal), avg(comm) FROM emp 3 WHERE job = e.job) 4 WHERE hiredate = (SELECT max(hiredate) FROM emp 5 WHERE job = e.job);
87
Oracle permite recuperar informaes estruturadas de forma hierrquica (em rvore): Voc pode selecionar linhas em uma ordem hierrquica usando as seguintes clusulas
voc pode especificar linha(s) pai de uma hierarquia. voc pode especificar o relacionamento entre linhas pais e linhas filhas de uma hierarquia. voc pode restringir as linhas retornadas pela consulta sem afetar outras linhas da hiearquia.
A clusula START WITH identifica a(s) linha(s) a ser(em) usada(s) como raiz(es) de uma consulta hierrquica. Esta clusula especifica uma condio que a raiz tem que satisfazer. Se voc omitir essa clusula, o Oracle7 usa todas as linhas na tabela como linhas raiz. A clusula CONNECT BY especifica o relacionamento entre linhas pais e filhas na consulta hierrquica. Esta clusula contm uma condio que define este relacionamento. Alguma parte da condio tem que usar o operador PRIOR para se referir a linha pai. Para encontrar o filho de uma linha pai, o Oracle7 executa a expresso PRIOR para a linha pai e a outra expresso para cada linha na tabela. Linhas para o qual a condio verdadeira so filhas. Se a clusula CONNECT BY resultar em um loop na hierarquia, o Oracle7 retorna um erro. Um loop ocorre se uma linha pai e filha de uma outra linha A seguinte clusula CONNECT BY define um relacionamento hierrquico no qual o valor EMPNO da linha pai seja igual ao valor do MGR da linha filha. CONNECT BY PRIOR empno = mgr
88
75 / PRESIDENTE
110 / DIRETOR
230 / SECRETRIA
189 / DIRETOR
103 / ANALISTA
276 / ANALISTA
201 / VENDEDOR
208/VENDEDOR
EMP 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934
ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER
JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK
MGR 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782
HIREDATE 17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-APR-87 17-NOV-81 08-SEP-81 23-MAY-87 03-DEC-81 03-DEC-81 23-JAN-82
SAL 800 1600 1250 2975 1250 2850 2450 3000 5000 1500 1100 950 3000 1300
DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10
Para saber todos os superiores do SCOTT: SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE ename <> SCOTT 4 CONNECT BY empno = PRIOR mgr 5 START WITH ename = SCOTT;
especifica a conexo da coluna indica o comeo da consulta
89
Para saber o nome do Presidente e de seus subordinados, exceto aqueles que so tambm subordinados de JONES:
SQL> SELECT empno, ename, job 2 FROM emp 3 CONNECT BY PRIOR empno = mgr AND mgr <> 7566 4 START WITH job = PRESIDENT;
Elimina toda uma sub-rvore
EMPNO 7839 7566 7698 7499 7521 7654 7844 7900 7782 7934
ENAME KING JONES BLAKE ALLEN WARD MARTIN TURNER JAMES CLARK MILLER
JOB PRESIDENT MANAGER MANAGER SALESMAN SALESMAN SALESMAN SALESMAN CLERK MANAGER CLERK
90
Podemos usar uma pseudo-coluna LEVEL para saber o nvel de cada registro na hierarquia:
SQL> SELECT level, lpad( ,2*level ) | | ename nome 2 FROM emp 3 CONNECT BY PRIOR empno = mgr 4 START WITH job = PRESIDENT;
LEVEL 1 2 3 4 3 4 2 3 3 3 3 3 2 3
NOME KING JONES SCOTT ADAMS FORD SMITH BLAKE ALLEN WARD MARTIN TURNER JAMES CLARK MILLER
91
IV.7 - EXERCCIOS
2. Consulte o nome dos chefes (MOME_CHEFE) dos funcionrios (ENAME) da tabela EMP, ordenados por NOME_CHEF. Caso algum funcionrio no possua chefe, mostre a cadeia de caracteres ___________ em NOME_CHEFE.
3. Consulte os nomes e salrios dos funcionrios que esto na mesma faixa salarial que seus chefes.
4. Aumente o salrio em 20% para os empregados que sejam os mais antigos de seus departamentos.
5. Promova a diretor os empregados que recebem mais que a mdia dos salrios de seus cargos.
7. Faa com que os empregados passem a ganhar o maior salrio dentre os companheiros da mesma faixa.
92
VI - ESTRUTURA DE DADOS
93
Tabelas podem ser criadas a qualquer hora, mesmo que o Banco de Dados esteja sendo utilizado. O tamanho dos dados so variveis, somente so armazenados os caracteres e nmeros. Os espaos em branco no so armazenados. No h necessidade de especificar o tamanho de alguma tabela. Isto definido pelo espao determinado para o Banco de Dados. Mas importante sempre verificar o tamanho das tabelas. As estruturas das tabelas podem ser modificas quando esto em uso.
94
O nome escolhido para a tabela deve sempre seguir as regras bsicas de nomenclatura dos objetos do Banco de Dados ORACLE.
1. O nome sempre deve comear com letra (A - Z) 2. Pode-se utilizar letras, nmeros e caracteres especiais 3. O nome da tabela no sensvel a letras maisculas e minsculas 4. Deve ter no mximo 30 caracteres 5. No pode existir duas tabelas, vises ou sinnimos para um mesmo usurio com o mesmo nome 6. O nome da tabela no pode ser uma palavra reservada do SQL
95
Utilize nomes auto-descritivos para tabelas, colunas, ndices ou outros objetos. Cuidado com as abreviaes e o uso de singular e plural nos nomes das tabelas. Crie padres para nomear os objetos. Ex.: tabela de notas fiscais nota_fiscal. Utilize os mesmos nomes definidos para as entidade-atributos para descreverem a tabela-coluna relacionada.
96
Quando criar uma tabela, voc deve especificar os tipos das colunas. Os mais utilizados so:
CHAR (n)
Valores tipo CHAR consistem em palavras compostas por letras minsculas e maisculas, nmeros e caracteres especiais. O nmero de caracteres especificado por n e no pode ser maior que 255. No usa armazenamento dinmico.
VARCHAR2(n)
So valores tipo CHAR com no mximo 2000 posies. Usa armazenamento dinmico.
NUMBER (n,m)
So valores numricos (0 - 9) e caracteres de sinal (+ -) e ponto decimal. n so nmeros inteiros e m so decimais. Usa armazenamento dinmico.
DATE
So valores tipo data. Ex.: December 31, 4712 BC. Usa 7 bytes.
LONG
Similar ao tipo CHAR, mas aceita a quantidade de caracteres acima de 65.535. S pode ser definida uma coluna LONG por tabela.
97
NULL
Esta opo define que a coluna pode possuir valores nulos. Esta opo default e pode ser omitida.
NOT NULL
Esta opo assegura que a coluna sempre tenha valores diferentes de nulo. Se tentar incluir uma linha com a coluna que tem essa opo sem valor, o ORACLE enviar uma mensagem de erro.
98
O Banco de Dados Oracle suporta documentao para integridade armazenando informaes sobre verificao de integridade no dicionrio de dados. Uma Constraint de integridade uma regra que define um relacionamento entre tabelas de um banco de dados. Por exemplo, uma constraint de integridade pode definir que um funcionrio no esteja contido em dois ou mais departamentos. Uma constraint pode ser definida para tabelas e colunas e so definidas no comando CREATE ou ALTER TABLE. O objetivo de uma constraint definir um intervalo de valores vlidos. Para que os comandos INSERT, UPDATE e DELETE sejam executados com sucesso, devem obedecer as regras de constraint estabelecidas. A utilizao de constraint possibilita definir as seguintes regras para uma ou mais colunas:
Definir que o valor da coluna seja nico na tabela (UNIQUE) Identificar a coluna como coluna chave da tabela (PRIMARY KEY) Estabelecer restries a chaves estrangeiras (FOREIGN KEY) Verificar se o valor de uma ou mais colunas esto de acordo com uma
expresso (CHECK).
99
Estes tipos so idnticos, a no ser que as constraint de coluna refereciem a uma coluna enquanto a de tabela refereciem a uma ou mais colunas da tabela. Definio da constraint da tabela: CREATE TABLE assignment ( projeto number (4) , funcionario number(4), PRYMARY KEY ( projeto, funcionario);
Definio da constraint da coluna: CREATE TABLE emp ( EMPNO NUMBER (4) NOT NULL CONSTRAINT EMPNO PRIMARY KEY, ENAME VARCHAR(10) CHECK (ENAME = UPPER (ENAME) ) , JOB VARCHAR(10) , MGR NUMBER (4) CONSTRAINT EMP_MGR REFERENCES EMP (EMPNO), HIREDATE DATE CHECK (HIREDATE <= SYSDATE), SEG_NUM VARCHAR(12) UNIQUE CONTRAINT EMP_SEG , SAL NUMBER (7,2) , COMM NUMBER (7,2) , DEPTNO NUMBER (2) NOT NULL CONSTRAINT EMP_DEPT REFERENCES DEPT(DEPTNO) );
100
CONSTRAINT nome_da_constraint
Define o nome da constraint. Este parmetro opcional. Se no definir o nome da constraint, ela receber um nome default no formato SYS_Cn, onde n um inteiro e nico identificador da constraint.
NULL/NOT NULL
Define se a coluna pode ou no conter valores nulos. O default que pode conter ( NULL).
UNIQUE
Certifica que cada linha da tabela ter um valor diferente para a coluna. Esta coluna tem que ser definida como NOT NULL e no pode ser a chave primria.
PRIMARY KEY
Define que a coluna a nica identificao de cada linha. Esta coluna tem que ser NOT NULL e no pode ter o UNIQUE constraint.
FOREIGN KEY ( coluna ...)/ Identifica que essa uma chave estrangeira da tabela do usurio definida. Deve sempre estar referenciada a REFERENCES uma tabela e no a uma viso. usurio.tabela(colunas)
CHECK
Define a condio que deve ser satisfeita para que a coluna possa ser includa ou alterada numa linha da tabela.
101
O comando CREATE TABLE usado para criar novas tabelas no banco de dados. Sintaxe:
CREATE TABLE schema. table
AS subquery
102
Onde: Schema o schema contendo a tabela. Se voc omitir o schema, o Oracle cria a tabela como seu prprio dono. o nome da tabela a ser criada. Especifica o nome de uma coluna da tabela. Uma tabela no pode ter mais do que 254 colunas. o tipo da coluna. Especifica um valor a ser atribudo para a coluna se um comando INSERT subsequente for omitido para o valor da coluna. O tipo da expresso tem que ser o mesmo tipo da coluna. Define uma integridade de constraint como parte da definio da coluna. Define uma integridade de constraint como parte da definio da tabela. Insere as linhas retornadas por uma subconsulta na tabela que ser criada.
Table Coluna
Tipo Default
103
Criando a tabela DEPT. CREATE TABLE dept (deptno number (2) NOT NULL, dname char (12), loc varchar2 (12)) ;
SQL> 2 3 4 5 6 7 8 9 10
CREATE TABLE emp (empno number(4) ename char(10) job char(10), mgr number(4) hiredate data CHECK (hiredate <= sysdate), sal number(10,2), comm number(10,2) deptno number(2)
Name Null --------------------------------------------- --------------- -----EMPNO NOT NULL ENAME JOB MGR HIREDATE SAL COMM DEPTNO NOT NULL
Type NUMBER (4) CHAR (10) CHAR (9) NUMBER (4) DATE NUMBER (7,2) NUMBER (7,2) NUMBER (2)
104
A tabela ser criada com as colunas especificadas e as linhas resultantes do comando SELECT sero inseridas na nova tabela. As especificaes das colunas podem ser omitidas se no comando SELECT foram especificadas. O nmero de colunas no comando SELECT deve ser igual ao do comando CREATE TABLE.
Table created.
Exemplo:
SQL> CREATE TABLE sal_medio AS 2 SELECT dname, avg(sal) Media_Salarial 3 FROM dept, emp 4 WHERE emp.deptno = dept.deptno 5 GROUP BY dname;
105
SQL> CREATE TABLE dep_temp AS 2 SELECT deptno, dname, loc 3 FROM dept; SQL> DROP TABLE dept; SQL> RENAME dep_temp TO dept;
106
VI.11 - ALTERANDO UMA TABELA O comando ALTER TABLE serve para alterar a estrutura de uma tabela. O parmetro ADD deve ser utilizado para adicionar uma coluna e/ou constraint para uma tabela existente.
ALTER TABLE schema. , ADD ( column_datatype DEFAULT exp table_constraint , MODIFY ( column datatype DEFAULT expr column_contraint ) column_constraint ) table
107
Onde:
Column_constraint Table_constraint
o nome da tabela a ser alterada. adiciona uma coluna ou integridade de constraint. modifica a definio de uma coluna existente. o nome da coluna a ser alterada ou modificada. especifica um tipo para a coluna ou um novo tipo para uma coluna existente. especifica um valor default para uma nova coluna ou um novo valor default para uma coluna existente. O Oracle assume esse valor para a coluna se um comando INSERT subsequence omitir um valor para a coluna. O tipo de um valor default tem que ser igual ao tipo especificado para a coluna. A expresso DEFAULT no pode conter referncias a outras colunas. adiciona ou remove uma constraint NOT NULL para ou de uma coluna existente. adiciona uma integridade de constraint para a tabela.
108
O comando abaixo adiciona a coluna NOME_DA_ESPOSA na tabela EMP. ALTER TABLE EMP ADD( nome_da_esposa CHAR (10));
O comando abaixo adiciona a constraint CHECK na coluna SAL da tabela EMP. ALTER TABLE EMP ADD(CHECK(sal <= 5000));
O comando abaixo modifica a coluna ENAME da tabela EMP para o tamanho de 25 posies. ALTER TABLE EMP MODIFY (ename char(25));
109
O comando RENAME server para alterar o nome dos objetos de uma banco de dados.
RENAME OLD TO
NEW ;
Todos os objetos de banco de dados relacionados tero que ser alterados. Exemplo: Aplicaes, programas, relatrios. Para mudar o nome de uma tabela: O exemplo abaixo troca o nome da tabela EMP para FUNCIONARIO. RENAME EMP TO FUNCIONRIO;
troca
nome
da
tabela
NOME_FUN
para
NOME_FUN TO NOME_FUNCIONARIO;
O exemplo abaixo troca o nome da tabela DEPT para DEPARTAMENTO. SQL> rename dept to departamento;
110
Sintaxe:
DROP TABLE schema. table CASCADE CONSTRAINTS
Onde:
schema
o esquem em que a tabela est contida. Se voc omitir o schema, o Oracle Server assume que o dono da tabela o schema corrente. o nome da tabela a ser apagada. apaga todas as constraints de integridade referencial que se refere chave primria e/ou nica na tabela a ser apagada. Se voc omitir esta opo, e existir constraint de integridade referencial, o Oracle Server retorna uma mensagem de erro e no apaga a tabela.
O comando DROP TABLE serve para remover a definio de uma tabela. DROP TABLE emp;
Quando uma tabela eliminada, todos os dados e os ndices associados tambm sero removidos.
Todos os dados sero removidos Todas as vises (VIEWS) e sinnimos (SYNONYMS) permanecero,
mas ficaro invlidas.
Todas as transaes pendentes sero gravadas. Somente o dono da tabela ou o DBA pode remov-la.
111
Para eliminar constraint de uma tabela, deve-se utilizar o parmetro DROP. ALTER TABLE emp DROP CONSTRAINT emp_seg;
112
O Comando COMMENT inclui um comentrio de no mximo 255 caracteres sobre a tabela ou coluna no dicionrio de dados. Adicionando um comentrio em uma tabela: COMMENT ON TABLE emp IS Informaes sobre Funciorios;
Para visualizar os comentrios, eles esto armazenados nas seguintes vises (VIEWS) do dicionrio de dados: ALL_COL_COMMENTS ou USER_COL_COMMENTS.
113