Vous êtes sur la page 1sur 113

SQL*PLUS

Conceito O SQL*PLUS um ambiente de trabalho que permite ao usurio ORACLE acessar o banco de dados para efetuar varias atividades como incluir, consultar, alterar ou remover dados;

O ambiente SQL*PLUS permite: - Editar, armazenar, recuperar e executar comandos SQL e blocos de comando SQL; - Formatar, executar clculos, armazenar e imprimir resultados de uma consulta; - Criar, alterar, remover e listar objetos, como: tabelas, ndices, seqncias, sinnimos e views; - Atribuir valores para execuo de comandos SQL; - Escolher um ambiente prprio de trabalho para edio de comandos;

Caractersticas do SQL: - uma linguagem no Procedural, que executa linhas de comandos; - Permite Incluir, consultar, alterar ou remover dados da base; - Garante consistncia e a integridade de dados; - Permite dar e retirar permisses de acesso a usurios; - Acesso e copia entre Bancos de dados diferentes; - Pode ser usada por: . Administradores de sistema; . Administradores de Banco de Dados; . Administradores de Segurana em Banco; . Gerentes; . Programadores em diversas ferramentas; . Pessoal de Suporte; . Usurios de banco de dados de modo geral;

- Com o SQL standard pode-se usar diversas ferramentas como Pr-compiladores: . Pro*Ada; . Pro*C; . Pro*Cobol; . Pro*Fortran; . Pro*Pascal; . Pro*PL/I ;

Structured Query Language - SQL*PLUS

Captulo 1 ACESSANDO O SQL*PLUS


Para que o usurio possa se conectar com o produto SQL*PLUS, necessrio que esteja previamente cadastrado como usurio ORACLE. Quando o ORACLE instalado, e criado automaticamente um usurio chamado SCOTT com a senha TIGER, este usurio acessa vrias tabelas e estruturas prprias deste usurio. Sintaxe de comando ambiente Character mode: SQLPLUS[usurio]/[senha] Prompt>sqlplus scott/tiger SQL*PLUS: Release 3.1.3.7.2 - Production on Wed Sep 04 15:22:47 1996 Copyright ORACLE Corporation 1979, 1994. All rights reserved. Connected to: Oracle7 Server Release 7.1.3.3.6 - Production Release With the tributed option PL/SQL Release 2.1.3.2.1 - Production SQL> Em ambiente Grfico: Localize o cone Sql*Plus no Windows e d um Click Duplo. Para abandonar o SQL*PLUS basta digitar: SQL> Exit; Para consulta comandos usa-se o comando HELP SQL> Help Para consulta o contedo do diretrio sem deslogar do SQL*PLUS: SQL> Host ou para executar o comando dentro do SQL*PLUS SQL> Host <comando do Sistema Operacional>

Structured Query Language - SQL*PLUS

Edio de comandos SQL no SQL*PLUS O SQL*PLUS possui um editor de comandos prprio conhecido como buffer.sql. O Buffer.sql uma rea que armazena sempre o ltimo comando SQL executado. O comando permanece nesta rea at que o usurio entre com um novo comando SQL. Exemplo: SQL> create table cadastro 2 (Codigo 3 Nome 4 dt_nascimento 5 id_sexo 6 Observao List O contedo do buffer ou parte do mesmo, pode ser exibido atravs do comando: Sintaxe: L[ist] [nmero linha] ou [*] [linha_inicial linha_final] ou [linha_inicial * ] ou L[ast] Obs: O asterisco ( * ) indica sempre a linha corrente do buffer. Ou seja a linha em que se est operando no momento Exemplo 1: Listando todo o buffer SQL> List 1 2 3 4 5 6*

number(2) not null, varchar2(20) not null, date, char, long

create table cadastro (Codigo number(2) not null, Nome varchar2(20) not null, dt_nascimento date, id_sexo char, Observao long

Exemplo2: Listando o contedo da linha 1 at a linha 3 SQL> List 1 3 1 create table cadastro 2 (Codigo number(2) not null, 3* Nome varchar2(20) not null,

Structured Query Language - SQL*PLUS

Exemplo 3: listando apenas a linha 2 e tornando-a corrente SQL> L 2 2* (Codigo Input Pode-se incluir uma ou mais linhas no buffer a partir da linha corrente ,ou no meio do texto, forando uma determinada linha a se tornar corrente. Sintaxe: I[NPUT] [texto] Exemplo 1: Incluindo uma linha depois da linha 2 SQL>List 3 3* nome

number(2)

not null,

varchar2(20)

not null,

SQL> i 4* data_inclusao date, ou SQL> i data_inclusao date, SQL> List 1 2 3 4 5 6 7* Change Sintaxe: C[HANGE]/texto antigo/[texto novo] O contedo de qualquer linha do buffer pode ser alterado todo ou parcialmente atravs do comando CHANGE. Exemplo: SQL> L 4 4* data_inclusao date, SQL> c/data_inclusao/dt_inclusao

create table cadastro (Codigo number(2) not null, Nome varchar2(20) not null, Data_inclusao date. dt_nascimento date, id_sexo char, Observao long)

Structured Query Language - SQL*PLUS

SQL> List 1 2 3 4 5 6 7*

create table cadastro (Codigo number(2) not null, Nome varchar2(20) not null, dt_inclusao date. dt_nascimento date, id_sexo char, Observao long)

Nota: No local da / pode-se usar outros caracteres. Preferencialmente usar caracteres no usados na descricao dos comandos;

Del Exclui a linha corrente do buffer; Sintaxe: DEL Exemplo: SQL> L 4 4* dt_inclusao date, SQL> del SQL> L 1 2 3 4 5 6*

create table cadastro (Codigo number(2) not null, Nome varchar2(20) not null, dt_nascimento date, id_sexo char, Observao long

Nota: No possvel excluir vrias linhas ao mesmo tempo. Append Pode-se acrescentar, ao final da linha corrente, um texto ou um caracter, utilizando o comando APPEND. Sintaxe: A[PPEND] [texto, caracter]

Structured Query Language - SQL*PLUS

Exemplo: SQL> 6 6* observao long SQL> a ) SQL> L 1 create table cadastro 2 (Codigo number(2) not null, 3 Nome varchar2(20) not null, 4 dt_nascimento date, 5 id_sexo char, 6* Observao long) - possvel ativar um editor de texto no SQL*PLUS utilizando o comando EDIT. O editor a ser chamado ser o que estiver definido na varivel _EDITOR. Caso esta no esteja definida, ser utilizado o editor default do sistema operacional no qual o usurio estiver trabalhando. Define Usado para definir variveis atribuindo-lhes valores Sintaxe: DEF[INE] [varivel [=valor]] Obs: Quando nenhuma varivel informada, o SQL*PLUS exibe o valor de todas as variveis que esto definidas. Exemplo 1: Verificando o contedo da varivel _EDITOR: SQL>define _EDITOR symbol _editor is UNDEFINED Exemplo 2: Escolhendo o editor de texto do DOS (Edit): SQL> define_ EDITOR = EDIT SQL>define_EDITOR define _EDITOR = EDIT (CHAR) Edit Sintaxe: ED[IT] [[caminho] nome_arquivo [extenso] O editor ativado e, aps a sada do mesmo, o controle novamente transferido o SQL*PLUS. SQL> Edit arquivo.sql
Structured Query Language - SQL*PLUS

para

Quando nenhum arquivo especificado, o SQL*PLUS criar no diretrio corrente um arquivo chamado AFIEDT.BUF que conter o comando do buffer. O editor ser ento ativado, carregando para a memria este arquivo; todas as alteraes realizadas atravs do editor sero automaticamente transferidas para o buffer, quando da sada do mesmo. Exemplo: Se existir algo no buffer: SQL> edit Wrote file afiedt.buf Executando o contedo do Buffer: O contedo de SQL editado no buffer, pode ser executada de trs maneiras diferentes: ; , / e run , especificadas a seguir: SQL Terminator A varivel de sistema SQLT[erminator], define o caracter que representa para o SQL*PLUS fim do comando de SQL e execuo imediata do mesmo. Normalmente, este caracter o ponto e virgula (;). Exemplo: Editando um arquivo para criar uma estrutura: SQL> SHOW SQLTERMINATOR SQLTERMINATOR , (hex 3b) SQL> create table cadastro 2 (Codigo 3 Nome 4 dt_nascimento 5 id_sexo 6* Observao Table created Barra (/): A barra / , quando digitada na primeira coluna da linha em branco do buffer, determinada a execuo do comando SQL; se for digitada diretamente no prompt, significa que o comando de SQL, contido no buffer, deve ser executado sem a exibio do mesmo.

number(2) not null, varchar2(20) not null, date, char, long);

Structured Query Language - SQL*PLUS

Exemplo 1: SQL> create table cadastro 2 (Codigo 3 Nome 4 dt_nascimento 5 id_sexo 6 Observao 7 / Table created Exemplo 2: Executando arquivo previamente digitado: SQL> / Table created RUN O comando run ou r , determina que o comando SQL do buffer, deve ser executado com a exibio do mesmo. Exemplo: Executando arquivo do buffer: SQL> Run 1 create table cadastro 2 (Codigo 3 Nome 4 dt_nascimento 5 id_sexo 6* Observao Table created Buffer x arquivo O buffer uma rea de memria capaz de armazenar temporariamente, um comando SQL; quando a conexo com o SQL*PLUS encerrada, o comando abandonado. Da mesma forma, quando outro comando digitado, o anterior passa a no existir; se for necessrio executar o comando outras vezes, tal comando deve ser gravado em um arquivo atravs do comando SAVE. OBS: A varivel de sistema SUF[FIX] define a extenso que deve ser assumida nas transaes, entre o SQL*PLUS e o sistema operacional, quando a extenso for omitida; normalmente esta extenso .sql .

number(2) not null, varchar2(20) not null, date, char, long)

number(2) not null, varchar2(20) not null, date, char, long)

Structured Query Language - SQL*PLUS

Save Para salvar um comando SQL em um arquivo, armazenando-o no diretrio especificado, ou no diretrio corrente. Sintaxe: SAV[E] [[caminho] nome_arquivo [.extenso] [REPLACE] Exemplo 1: Salvando arquivo no diretrio corrente SQL> Save c:\users\trabalho\arquivo Created file arquivo Exemplo 2: Salvando com o mesmo nome quando j existe SQL> Save arquivo replace Wrote file arquivo GET Para recuperar um arquivo tipo SQL e carregar no buffer Sintaxe: GET [[caminho] nome_arquivo [.extenso] Exemplo 1: Chamando arquivo SQL. SQL> get c:\users\trabalho\arquivo Start ou @ Para carregar em buffer e executar comandos: Sintaxe: STA[RT] [[caminho] nome_arquivo [.extenso] @ [[caminho] nome_arquivo [.extenso] Exemplo 1: Executando o arquivo diretamente SQL> @arquivo Clear buffer Limpa conteudo do SQL buffer ou

Structured Query Language - SQL*PLUS

SQL> clear buffer Colocando comentrios nos comandos SQL Usando REM[ARK] Usa-se no incio da linha acompanhado do comentrio Exemplo: REM Relacao de Funcionrios REM para pagamento de Salrios Select empno, ename, job, comm, sal REM verificando na tabela EMP from emp order by deptno / Usando /* ....... */

Usa-se para abranger o comentario Exemplo: /* Relacao de Funcionarios para pagamento de Salrios */ /* */ Select empno, ename, job, comm, sal from emp /* verificando na tabela EMP */ order by deptno / Usando -Usa-se antes do comentario: Exemplo: -- Relacao de Funcionarios -- para pagamento de Salrios -Select empno, ename, job, comm, sal from emp -- verificando na tabela EMP order by deptno /

Structured Query Language - SQL*PLUS

10

Captulo 2 ACESSANDO O BANCO DE DADOS ORACLE


Criando uma Tabela: - Uma tabela corresponde a um arquivo convencional; - Uma linha da tabela corresponde a um registro de um arquivo convencional; - Uma coluna da tabela corresponde a um registro de um arquivo convencional; - Uma tabela e composta por uma ou mais colunas; - Cada coluna possui um tipo de dado e tamanho(quando aplicvel); - Pode-se informar restries para cada coluna ou p/ um conjunto de colunas; Criando a estrutura de uma tabela. - O nome da tabela pode ser composto por letras, nmeros e underscore, porm deve sempre comear com caracter alfabtico; - Mximo 30 caracteres; - No pode ser palavra reservada; - O nome do objeto deve ser nico; - Deve ter no mnimo uma coluna; Sintaxe: CREATE TABLE usurio.nome_tabela (nome_coluna tipo_dado [tamanho} [restries], (nome_coluna tipo_dado [tamanho] [restries], [restries]) TABLESPACE nome_tablespace PCTFREE nmero PCTUSED nmero Exemplo: Para criar uma tabela, digite na linha de comando: SQL> create table EMP 2 (empno number(4) not null, 3 ename varchar2(20), 4 job varchar2(10), 5 mrg number(4), 6 hiredate date, 7 sal number(7,2), 8 comm number(7,2), 9 deptno number(2) not null) Table created.

Structured Query Language - SQL*PLUS

11

Tipos de dados Informar um tipo de dado para uma coluna significa que a coluna s aceita valores compatveis com este tipo de dado. CHAR Colunas que armazenam valores alfanumricos com tamanho fixo (mximo de 255 bytes): caso o tamanho no seja informado, o ORACLE assume que o tamanho 1. Nota: Na insero de um valor temos: * Se o valor for menor que o tamanho definido, so adicionados brancos; * Se o valor for maior que o tamanho definido, retornado um erro. Exemplos: SQL> create table cadastro 2 (.... 3 nome char(20), 4 ......); SQL> create table cadastro 2 (.... 3 Id_Sexo char, 4 ......); VARCHAR2 Colunas que armazenam valores alfanumricos com tamanho varivel (mximo de 2000 bytes), o tamanho deve ser informado. Exemplo: SQL> create table cadastro<n> 2 (.... 3 Nome varchar2(20), 4 .......); VARCHAR Usado nas verses anteriores, a ORACLE no recomenda seu uso. LONG [VARCHAR] Colunas que armazenam valores alfanumricos com tamanho varivel (mximo de 2G bytes); o tamanho no deve ser informado.

Structured Query Language - SQL*PLUS

12

Exemplo: SQL> create table cadastro 2 (...... 3 Observao Long varchar ou Observao Long, 4 ....); RAW Colunas que armazenam valores binrios com tamanho varivel mximo de 255 bytes). O tamanho tem que ser informado (este tipo mais usado para armazenar seqncias de caracteres grficos). LONG RAW Colunas que armazenam valores binrios com tamanho varivel (mximo de 2G bytes); o tamanho no deve ser informado (este tipo mais usado para armazenar seqncias de caracteres grficos). Nota: Para os tipos LONG e LONG RAW: - Somente permitido um campo por tabela; - No podem fazer parte de clusulas WHERE, GROUP BY, ORDER BY, CONNECT BY ou DISTINCT, No podem ser usados em expresses (SUBSTR, INSTR, etc); - No podem ser indexes; - No podem aparecer em expresses ou condies - No podem ser passados como argumentos para procedures ou funes; NUMBER Colunas que armazenam valores numricos, positivos ou negativos, com no mximo de 38 dgitos; caso o tamanho no seja informado, o ORACLE assumir que o tamanho mximo 38 com o ponto decimal flutuante. O tamanho de uma coluna numrica pode ser definido com preciso e escala . Exemplos: Especificao number number(9) number(9,2) number(9,1) number(6) number(15,1) number(7,2) number(7,-2) number(4,5) Dados 7456123.89 7456123.89 7456123.89 7456123.89 7456123.8 7456123.8 7456123.89 7456123.89 .01234 Valor Armazenado 7456123.89 7456124 7456123.89 7456123.9 Erro 7456123.8 Erro 7456100 .01234 13

Structured Query Language - SQL*PLUS

number(4,5) number(4,5) number(2,7) number(2,7)

.00012 .000127 .0000012 .00000123

.00012 .00013 .0000012 .0000012

cdigo number (2) not null, salrio number(9,2), vl_completo number(3,8), vl_deposito number (10,-2) DATE Colunas que armazenam data, hora (com minutos e segundos) e o sculo; no deve ser informado o tamanho. Exemplo: SQL> Create table Cadastro (.... dt_inclusao date, ....); Verificando a Estrutura de uma tabela Uma vez criada a tabela no Banco de Dados, pode-se visualizar a definio de sua estrutura atravs do comando DESCRIBE DESCRIBE Sintaxe: DESC[RIBE] nome_tabela Exemplo: SQL> desc emp

Structured Query Language - SQL*PLUS

14

Exerccios - 01 1. Editar no buffer SQL o seguinte comando: Create table departamento ( deptno number(2), nome varchar2(14), local varchar2(13), data_de_cadastro date, observao long 2. Efetuar as seguintes alteraes: - Alterar a coluna local para Loc e data_de_cadastro para dt_cadastro ; - Alterar o tamanho da coluna nome para 20 - Incluir as colunas dt_atualizacao nm_usurio - Excluir a coluna observao ; - Acrescentar ) ao final da ultima coluna. 3. Executar o contedo do buffer. 4. Salvar o arquivo de comandos com o nome dept.sql. 5. Editar o comando Create table grade_salarial (grade number(2), minsal number, maxsal number) 6. Salvar no arquivo salgrade.sql 7. - Desconectar-se e conectar-se novamente no SQL*PLUS. - Executar o comando de criao da tabela salgrade. - Verificar a descrio da tabela salgrade criada. date e varchar2(20)

Structured Query Language - SQL*PLUS

15

Captulo 3 INTEGRIDADE DE DADOS E REFERENCIAL


Restries / Constraints

Restries so regras bsicas, informadas ao RDBMS, para o controle do preenchimento de uma ou mais colunas da tabela. Podem ser especificadas na definio da coluna (column constraint) ou no final do comando de criao da tabela (table constraint).

Estas restries foram a consistncia e integridade referencial do Banco de Dados; toda restrio criada possui um nome que pode ser atribudo pelo usurio atravs da opo CONSTRAINT. Caso isto no ocorra, o ORACLE se encarregar de escolher um nome de acordo com critrios prprios (a vantagem dessa atribuio ser realizada pelo usurio a facilidade de uma excluso futura).

O uso de restries eliminam erros de programao, alm de sua funcionalidade ser controlada pelo ORACLE. Estas restries so armazenadas no dicionrio de dados; por isso os dados inseridos atravs de qualquer aplicao se ajustam as constraints definidas.

Caso alguma restrio seja violada, imediatamente so retornadas mensagens de erro que podem ser tratadas pelas aplicaes.

Exemplo 1: Column Constraint SQL> Create table Emp (empno number(4) ename varchar2(20) job varchar2(10), mrg number hiredate sal comm deptno date number(12,2) number(5,2), number(2)

constraint pk_emp primary key, constraint uk_emp unique, constraint fk_mgr references emp, default sysdate, constraint ck_sal check (sal > 500), constraint fk_deptno references dept);

Structured Query Language - SQL*PLUS

16

Exemplo 2: Table Constraint SQL. Create table Emp (empno number(4) , ename varchar2(20) , job varchar2(10) , mgr number , hiredate date , sal number(12,2) , comm number(5,2) , deptno number(2) , constraint pk_emp primary key (empno), constraint uk_emp unique(ename), constraint fk_mgr foreign key (mgr) references emp(empno), constraint ck_sal check (sal > 500), constraint fk_deptno foreign key (deptno) references dept(deptno) on delete cascade)

Not Null Define se o preenchimento da coluna obrigatrio, s pode ser declarado junto com a coluna. Caso no seja informada, ser assumida a opo NULL. Exemplo: SQL> Create table Emp (....., ename varchar2(20) .....); Primary Key Define que uma ou mais colunas compem a chave primria da tabela. So usadas para identificar uma linha exclusiva da tabela. Desta forma para cada chave retornada apenas uma linha da tabela. Exemplo: SQL> Create table Emp (empno number(4), ... deptno number(2), constraint pk_emp primary key (empno), ....);

not null,

Structured Query Language - SQL*PLUS

17

Unique Define que uma ou mais colunas no podem ter valores repetidos em diferentes linhas da tabela. Exemplo: SQL> Create table Emp (..., ename varchar2(20) ...); References Define que uma coluna a chave primria ou nica, em uma outra tabela, s pode ser declarada junto com a coluna. Exemplo: SQL> Create table Emp (...., deptno number(2) constraint fk_deptno references dept(deptno)); Nota: - A referncia garante que para cadastrar um empregado, o cdigo do departamento tem que estar cadastrado na tabela Dept. - Omitindo a definio do tipo de dado, ser herdado o tipo da coluna a qual esta sendo referenciada. - Omitindo-se o nome da coluna referenciada, ser realizada a correspondncia com a chave primria da outra tabela. Exemplo: SQL> Create table Emp ( ..., deptno constraint fk_emp_dept On delete cascade - Garante a deleo dos filhos quando o pai e deletado atravs da integridade referencial.

constraint uk_emp unique,

references dept);

Structured Query Language - SQL*PLUS

18

Foreign Key Define que uma ou mais colunas compem a chave primria ou so nicas em uma outra tabela, s podem ser declaradas depois de todas as colunas. Exemplo: SQL> Create table Emp (.... deptno number(2)

constraint fk_deptno foreign key (deptno) references dept(deptno));

Check Define um domnio de valores permitidos para uma coluna. Exemplo 1: SQL> Create table Emp (....., sal number(12,2) .....); Exemplo 2: SQL> Create table Cadastro (....., id_sexo varchar2(1) constraint ck_sexo check (id_sexo in ( M , F )), .....);

constraint ck_sal check (sal > 500),

Structured Query Language - SQL*PLUS

19

Exerccios - 02 1. Criar as seguintes tabelas e suas constraints: Cliente --------cd_cliente nm_cliente ie_sexo endereo cidade c(20) estado CEP DDD fone cd_representante vl_limite_credito observao Produto ---------cd_produto ds_produto Pedido --------nr_pedido dt_pedido ie_comissao cd_cliente dt_envio vl_total Item_Pedido ----------------nr_pedido nr_item cd_produto vl_unitario quantidade vl_total_item

n(6) c(45) c(1) c(45) c(2) n(9) n(4) n(9) n(4) n(10,2) long

chave primria chave nica somente aceitar F ou M obrigatrio

obrigatrio

n(6) c(50)

chave primria chave nica

n(4) data c(1) data n(12,2)

chave primria obrigatria deve aceitar S ou N chave estrangeira na tabela cliente deve ser maior ou igual a zero

n(4) n(4) n(6) n(9,2) n(8) n(9,2)

chave estrangeira na tabela pedido chave estrangeira na tabela produto obrigatrio obrigatrio

obs.: Chave primria composta por: 2. Verificar a estrutura das tabelas criadas.

nr_pedido e nr_item

Structured Query Language - SQL*PLUS

20

Manuteno da Estrutura de Tabelas e Controle de Transaes

Alterando a Estrutura de uma Tabela: Depois de criada a estrutura de uma tabela, possvel acrescentar colunas, acrescentar ou excluir restries, modificar caractersticas de colunas. ALTER TABLE Sintaxe: ALTER TABLE nome_tabela ADD ( nome_coluna tipo_dado [tamanho] [restrio], nome_coluna tipo_dado [tamanho] [restrio]) MODIFY ( nome_coluna tipo_dado [tamanho], nome_coluna tipo_dado [tamanho]) DROP CONSTRAINT nome_restrio - A opo ADD utilizada para acrescentar definies de colunas ou restries. - A opo MODIFY utilizada para alterar as definies da coluna ( tamanho e/ou tipo de dado, ou acrescentar a restrio de nulo ou no nulo). - A opo DROP CONSTRAINT utilizada para excluir restries de colunas ou da tabela. Nota: - No possvel alterar uma coluna contendo nulos para uma constraint NOT NULL; tambm no possvel diminuir o tamanho da coluna ou alterar o tipo de dado, a menos que esta no contenha dados. - Para alterar uma restrio, esta deve ser eliminada e ento pode-se adicionar as alteraes desejadas, como uma nova restrio. Exemplo 1: Incluindo uma constraint na tabela Emp SQL> Alter table Emp add constraint ck_sal check (sal <= 5000); Exemplo 2: Modificando a tabela Emp SQL> Alter table Emp modify ename char(25);

Structured Query Language - SQL*PLUS

21

Exemplo 3: Dropando uma constraint na tabela Emp SQL> Alter table Emp drop constraint ck_sexo; Nota: A definio da constraint fica na tabela USER_CONSTRAINTS e as colunas descritas na constraint ficam na tabela USER_CONS_COLUMNS. SQL> desc user_constraints;

Structured Query Language - SQL*PLUS

22

Exerccios - 03 1. Incluir na tabela grade_salarial a coluna: Observao long.

2. Incluir na tabela departamento : chave primria usando a coluna deptno; chave nica usando o nome; dt_cadastro com data do sistema. 3. Retirar a unicidade da tabela produto para descrio. 4. Incluir na tabela produto as colunas: dt_atualizacao nm_usurio date c(20) deve ter como default a data do sistema

Structured Query Language - SQL*PLUS

23

Captulo 4 INCLUINDO LINHAS EM UMA TABELA


Sintaxe: INSERT INTO nome_tabela (coluna_1, [coluna_2], [coluna_n]) VALUES (valor_1, [valor_2], [valor_n]) Existem 3 maneiras de inserir dados numa tabela usando o Insert do SQL: - Informando valores para cada coluna: SQL> Insert into Emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (2121, Roberto , Analista , 7566, 12-feb-96 , 3000, null, 20); - Informando apenas volores para colunas obrigatrias. SQL> Insert into Emp (empno, deptno) values (2121, 20); - No declarando as colunas: SQL> Insert into Emp values (2121, Roberto , Analista ,7566, 12-feb-96 , 3000,null,20); Nota: Quando no so informadas as colunas da tabela, deve-se informar valores para toda a tabela, inclusive as colunas que admitem valores nulos.

Structured Query Language - SQL*PLUS

24

Concluindo Transaes com o Banco de Dados Transao uma unidade lgica de trabalho composta por comandos de SQL que sero tratados pelo RDBMS. Uma transao comea com o primeiro comando SQL executado depois da conexo com o SQL*PLUS, ou do encerramento da transao anterior; e pode ser finalizada de vrias formas. Nenhum dos comandos de SQL que realizam alteraes no dicionrio de dados (DDL) pode ser desfeito, ou seja, ao criarmos a estrutura de uma tabela, esta passa a ser verdadeira para o banco de dados. Estes comandos tambm encerram uma transao. Os comandos de SQL que realizam operaes com linhas de tabela, podem ser desfeitos com o comando ROLLBACK ou confirmados com o COMMIT, finalizando desta forma a transao que estava pendente. Enquanto a transao no for concluda, as alteraes s sero vlidas para a sesso corrente, ou seja, outros usurios no tero acesso aos dados dessas alteraes. Os comandos de SQL DDL ao encerrarem uma transao, tornam verdadeiras, para todos os usurios, as atualizaes feitas no banco de dados. Savepoint Um processo completo pode ser dividido em vrias partes com o comando SAVEPOINT. A finalidade desta diviso a opo de desfazer somente uma parte do processo e no todo ele. sintaxe: SAVEPOINT nome_ponto Por default, o nmero mximo de pontos ativos numa transao 5, mas pode ser alterado para at 255, conforme parametrizao do Banco de Dados. Exemplo: SQL> Insert into Emp values (2121, Roberto , Analista ,7566, 12-feb-96 , 3000,null,20); 1 row created SQL> Savepoint Primeiro_ponto;

Structured Query Language - SQL*PLUS

25

SQL> Insert into Emp values (2122, Magali , Programadora ,7566, to_date( 13/07/1996 10:30 , dd/mm/yyyy hh:mi ), 2000,null,20); 1 row created ROLLBACK sintaxe: ROLLBACK [TO [SAVEPOINT] nome_ponto] Nota: Se for digitado apenas a palavra ROLLBACK, todas as transaes no efetivadas sero desfeitas, ou tambm pode-se informar a partir de qual ponto podem ser desfeitas as transaes. Exemplo 1: Desfazendo a segunda incluso SQL> rollback to Savepoint Primeiro_ponto; Rollback complete Exemplo 2: Desfazendo toda a transao SQL> Rollback; Rollback complete COMMIT sintaxe: COMMIT Efetiva todas as transaes pendentes. Exemplo 1: Confirmando transao SQL> Rollback to Savepoint Primeiro_ponto; Rollback complete SQL> Commit; Commit complete

Structured Query Language - SQL*PLUS

26

Nota: Pode-se estabelecer para uma sesso, ou parte da mesma, que ao final da execuo de cada comando de SQL DML, ser realizado um COMMIT AUTOMTICO. Desta forma, cada transao ser composta de um e somente um comando, e no poder ser desfeita. Para realizar tal procedimento, basta atribuir ON ou IMM[EDIATE] varivel de sistema AUTO[COMMIT]. Exemplo: SQL> set autocommit on;

Structured Query Language - SQL*PLUS

27

Exerccios - 04 1. Incluir na tabela PRODUTO os seguintes registros: Codigo --------1 2 3 4 Descrio ------------------Clipes pequeno Clipes Mdio Clipes Grande Caneta Azul

dt_atualizacao = SYSDATE nm_usurio = USER 2. Incluir na tabela GRADE_SALARIAL os seguintes registros: Grade -------1 2 3 4 5 minsal -----------1 501 1001 2001 3001 maxsal ---------500 1000 2000 3000 9999

observao = Null 3. Confirmar no banco de dados as incluses realizadas. 4. Executar o arquivo DEMOBLD7.SQL que est no diretrio corrente.

Structured Query Language - SQL*PLUS

28

Captulo 5 RECUPERAO DE DADOS


Em uma tabela possvel selecionar todas as colunas, somente algumas colunas, um texto fixo, colunas concatenadas entre si, colunas concatenadas com um texto fixo, colunas formatadas, etc. Podemos tambm, eliminar na exibio, as tuplas do resultado que forem repetidas. A ordem em que as colunas foram criadas no importa, pois o comando SELECT permite vrias combinaes para a seleo. Sintaxe: SELECT [ALL/DISTINCT] { [*] [ [tabela.]nome_coluna1 [alias1] , [tabela.]nome_coluna2 [alias2] [,funo(nome_coluna3) [alias3] ] [, texto ]} FROM [usurio.]nome_tabela1 [alias_tabela1], [usurio.]nome_tabela2 [alias_tabela2] [WHERE <condies>] [GROUP BY <expresso>] [HAVING <condio>] [ORDER BY nome_coluna / posicao_coluna [ASC/DESC]] ;

Nota: A opo ALL define que devero ser exibidas todas as tuplas selecionadas, mesmo que elas aparecem mais de uma vez. - A opo DISTINCT especifica que para cada grupo de tuplas repetidas, s ser exibido um elemento. - O asterisco (*) indica que devero ser exibidas todas as colunas, nos seus formatos originais e na ordem de criao da tabela.

Structured Query Language - SQL*PLUS

29

Exemplo 1: Retornando todas as Colunas SQL> select * from emp;


EMPNO ----7839 7698 7782 7566 7654 7499 7844 .... ENAME ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JOB MGR HIREDATE SAL COMM DEPTNO --------- --------- --------- ------- --------- ------PRESIDENT 17-NOV-81 5000 10 MANAGER 7839 01-MAY-81 2850 30 MANAGER 7839 09-JUN-81 2450 10 MANAGER 7839 02-APR-81 2975 20 SALESMAN 7698 28-SEP-81 1250 1400 30 SALESMAN 7698 20-FEB-81 1600 300 30 SALESMAN 7698 08-SEP-81 1500 0 30

14 rows selected.

Exemplo 2: Aplicando uma funo de grupo SQL> select sum(sal) from emp; SUM(SAL) -----------29025 Exemplo 3: Com expresses aritmticas ( +, -, *, / ) SQL> select ename, (sal + 10) * 10 from emp; ENAME (SAL+10)*10 ---------- ----------KING 5020 BLAKE 2870 CLARK 2470 JONES 2995 MARTIN 1270 ALLEN 1620 TURNER 1520 .... 14 rows selected. Exemplo 4: Com Colunas Concatenadas SQL> select empno || ename from emp;

Structured Query Language - SQL*PLUS

30

EMPNO||ENAME ------------------------7839KING 7698BLAKE 7782CLARK 7566JONES 7654MARTIN .... Exemplo 5: Colunas Concatenadas com texto SQL> select empno|| - ||ename, TRABALHA NO DEPARTAMENTO , deptno from emp; FUNCIONARIO TRABALHANODEPARTAMENTO' DEPTNO ------------------ ------------------------------- -----7839-KING TRABALHA NO DEPARTAMENTO 10 7698-BLAKE TRABALHA NO DEPARTAMENTO 30 7782-CLARK TRABALHA NO DEPARTAMENTO 10 7566-JONES TRABALHA NO DEPARTAMENTO 20 7654-MARTIN TRABALHA NO DEPARTAMENTO 30 .... Exemplo 6: Colunas com ALIAS SQL> select empno || - || ename FUNCIONRIO from emp; FUNCIONRIO --------------------------7839-KING 7698-BLAKE 7782-CLARK 7566-JONES 7654-MARTIN .... Exemplo 7: Apresentando todos os tipos de cargos SQL> select distinct job from emp; JOB --------ANALYST CLERK MANAGER PRESIDENT SALESMAN

Structured Query Language - SQL*PLUS

31

Nota: O alias ou apelido deve ser usado para colocar TTULOS sobre as colunas, estes apelidos podem ter uma ou mais palavras, quando for composto podese usar underscore ( _ ), ou faze-lo com espaos em branco colocando o apelido neste caso entre aspas duplas ( ) Exemplos: SQL> select empno || - || ename FUNCIONRIO, TRABALHA NO DEPARTAMENTO , deptno NMERO from emp; SQL> select empno || - || ename Cdigo e Nome from emp; Cdigo e Nome ---------------------7839-KING 7698-BLAKE 7782-CLARK 7566-JONES 7654-MARTIN 7499-ALLEN 7844-TURNER .... 14 rows selected SQL> select to_char(hiredate,'dd/mm/yy hh24:mi:ss') 2 "Dt Admissao" 3* from emp; Dt Admissao --------------------------------------------------------17/11/81 00:00:00 01/05/81 00:00:00 09/06/81 00:00:00 02/04/81 00:00:00 28/09/81 00:00:00 20/02/81 00:00:00 08/09/81 00:00:00 .... 14 rows selected.

Structured Query Language - SQL*PLUS

32

Variveis de Ambiente SQL*PLUS O ambiente do SQL*PLUS pode ser formatado para revelar um ambiente particular, de acordo com as necessidades do usurio. O ambiente do SQL*PLUS possui um formato default, mas que pode ser alterado atravs de variveis de sistema. Feedback Toda vez que um comando SQL executado, o RDBMS retorna uma mensagem de acordo com o tipo de operao que foi realizada. Por exemplo, quando selecionamos dados de uma tabela, a mensagem n rows select exibida. Essas mensagens podem ser omitidas, atribuindo-se OFF varivel de sistema FEEDBACK. Sintaxe: SET FEED[BACK] ON/OFF Exemplo: SQL> set feedback off; SQL> select empno || - || ename Codigo e Nome from Emp; Codigo e Nome -------------------7839-KING 7698-BLAKE 7782-CLARK 7566-JONES 7654-MARTIN 7499-ALLEN 7844-TURNER .... Space Determinar a quantidade de caracteres em branco que devem ser exibidos entre uma coluna e outra. Sintaxe: SET SPA[CE] nmero_de_espacos

Structured Query Language - SQL*PLUS

33

Exemplo: Colocando o space com 10 (dez) SQL> set space 10 SQL> select 'Funcionario: , empno from emp; 'FUNCIONARIO --------------------Funcionario: Funcionario: Funcionario: Funcionario: Funcionario: Funcionario: Funcionario: .... Linesize Determina o nmero mximo de caracteres que o SQL*PLUS exibir por linha. Sintaxe: SET LIN[ESIZE] nmero_de_colunas Exemplo: Com tamanho de linha 35 SQL> set linesize 35 SQL> select empno, ename, job, deptno from emp; EMPNO ---------DEPTNO --------7839 10 7698 30 7782 10 .... Wrap Se o total de caracteres a serem exibidos for maior que o nmero mximo especificado na varivel de sistema Linesize, o SQL*PLUS passar a(s) coluna(s) que no couberem na linha para a linha de baixo (WRAP=ON), caso contrrio o restante da linha ser truncado (WRAP=OFF) ENAME JOB ---------- --------KING BLAKE CLARK PRESIDENT MANAGER MANAGER EMPNO -------7839 7698 7782 7566 7654 7499 7844

Structured Query Language - SQL*PLUS

34

Sintaxe: SET WRA[P] ON / OFF Exemplo: Exibindo as colunas selecionadas em uma mesma linha SQL> set wrap off SQL> select empno, ename, job, deptno from emp; rows will be truncated truncating (as per request) before column DEPTNO EMPNO --------7839 7698 7782 7566 7654 7499 7844 .... Pagesize Determina o nmero mximo de linhas que o SQL*PLUS exibir por pgina. Para realizar este clculo, deve-se levar em considerao a linha do ttulo da coluna, a sublinha, o total de tuplas e mais uma linha em branco. Sintaxe: SET PAGES[IZE] nmero_de_linhas Exemplo 1 : Especificando no mximo de 6 linhas por pgina SQL> set pagesize 6 SQL> select empno, ename, job , deptno from emp; EMPNO ENAME JOB --------- ---------7839 KING 7698 BLAKE 7782 CLARK DEPTNO --------- --------PRESIDENT 10 MANAGER 30 MANAGER 10 ENAME ------------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JOB --------PRESIDENT MANAGER MANAGER MANAGER SALESMAN SALESMAN SALESMAN

EMPNO ENAME JOB DEPTNO --------- ---------- --------- ---------

Structured Query Language - SQL*PLUS

35

7566 JONES 7654 MARTIN 7499 ALLEN EMPNO --------7844 7900 7521 EMPNO --------7902 7369 7788 .... ENAME ---------TURNER JAMES WARD ENAME ---------FORD SMITH SCOTT

MANAGER SALESMAN SALESMAN

20 30 30

JOB DEPTNO --------- --------SALESMAN 30 CLERK 30 SALESMAN 30 JOB DEPTNO --------- --------ANALYST 20 CLERK 20 ANALYST 20

Pause possvel fazer com que o SQL*PLUS pare de exibir os dados selecionados toda vez que ocorrer quebra de pgina, aguardando que o usurio pressione <ENTER> , para exibir a prxima pgina. Sintaxe: SET PAU[SE] ON / OFF Exemplo: SQL> Set pause on

Heading Toda coluna selecionada, carrega um ttulo de identificao, caso seja necessrio a omisso do mesmo, basta atribuir OFF varivel de sistema HEADING. Sintaxe: SET HEA[DING] ON / OFF Exemplo: Omitindo o cabealho. SQL> set heading off SQL> select empno, ename, job, deptno from emp;

Structured Query Language - SQL*PLUS

36

7839 7698 7782 7566 7654 7499 7844 .... Underline

KING BLAKE CLARK JONES MARTIN ALLEN TURNER

PRESIDENT MANAGER MANAGER MANAGER SALESMAN SALESMAN SALESMAN

10 30 10 20 30 30 30

O ttulo de identificao da coluna pode ser sublinhado ou no. A sublinha pode ser formada por qualquer caracter que no seja alfanumrico, nem espao em branco. Sintaxe: SET UND[ERLINE] caracter Exemplo 1: Colocando o sublinhado como (=) SQL> set underline = SQL> select empno, ename, job, deptno from emp; EMPNO ========= 7839 7698 7782 7566 7654 7499 7844 .... ENAME ========== KING BLAKE CLARK JONES MARTIN ALLEN TURNER JOB DEPTNO ========= ======== PRESIDENT 10 MANAGER 30 MANAGER 10 MANAGER 20 SALESMAN 30 SALESMAN 30 SALESMAN 30

Structured Query Language - SQL*PLUS

37

Exemplo 2: Retirando o sublinhado SQL> set underline off SQL> select empno, ename, hiredate, sal, comm, job from emp; EMPNO 7839 7698 7782 7566 7654 7499 7844
....

ENAME KING BLAKE CLARK JONES MARTIN ALLEN TURNER

JOB PRESIDENT MANAGER MANAGER MANAGER SALESMAN SALESMAN SALESMAN

DEPTNO 10 30 10 20 30 30 30

Feedback Sempre que um comando SQL executado, o RDBMS retorna uma mensagem de acordo com o comando que foi executado. Por exemplo: no comando select a mensagem final de quantas linhas foram selecionada: n rows Selected , caso o select no retorne linha: no rows selected . o Comando Feedback ativa e desativa esta opo. Sintaxe: SET FEED[BACK] ON / OFF

SQL> select * from dept; DEPTNO --------10 20 30 40 SQL> DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON

Structured Query Language - SQL*PLUS

38

Exerccios - 05 1. Elimine as duplicidades de departamento, selecionando apenas um de cada tipo da tabela emp. 2. Selecione dados da tabela CUSTOMER para obter o seguinte resultado: Cliente ------100 101 102 103 104 105 106 107 108 Nome Limite Credito ----------------------------------------- -------------JOCKSPORTS 5000 TKB SPORT SHOP 10000 VOLLYRITE 7000 JUST TENNIS 3000 EVERY MOUNTAIN 10000 K + T SPORTS 5000 SHAPE UP 6000 WOMENS SPORTS 10000 NORTH WOODS HEALTH AND FITNESS SUPPLY CENTER 8000

3. selecione dados da tabela CUSTOMER para obter um resultado semelhante: Codigo e Nome **************************************************************** 100 - JOCKSPORTS 101 - TKB SPORT SHOP 102 - VOLLYRITE 103 - JUST TENNIS 104 - EVERY MOUNTAIN 105 - K + T SPORTS 106 - SHAPE UP 107 - WOMENS SPORTS 108 - NORTH WOODS HEALTH AND FITNESS SUPPLY CENTER 4. selecione dados da tabela CUSTOMER para obter um resultado semelhante: ( 10 espaos entre cada coluna) 100 101 102 103 104 JOCKSPORTS TKB SPORT SHOP VOLLYRITE JUST TENNIS EVERY MOUNTAIN

5. Selecione o nome, salrio anual e a comisso dos funcionrios.

Structured Query Language - SQL*PLUS

39

Funes de Converso entre Tipos de Dados Toda coluna de uma tabela definida com um tipo de dado, no entanto, quando uma coluna selecionada, pode ser exibida em um formato diferente. Para isso devese utilizar as funes de converso. To_date (char, formato) Converte para o formato DATE, um valor (de data) em CHAR que se encontra no formato indicado. Exemplo: SQL> select to_date('15-jul-96' , 'dd/mon/yy') data_selecionada 2* from dual DATA_SELE --------15-JUL-96

To_char (number/date [,formato]) Converte para o formato CHAR informado, um valor em NUMBER. Exemplo: Com a coluna Salrio da tabela EMP SQL> select to_char(sal, '999,999,999.99') salarios 2 from emp; SALARIOS -------------5,000.00 2,850.00 2,450.00 2,975.00 1,250.00 1,600.00 1,500.00 ....

SQL> select to_char( sysdate, HH24:MI:SS ) hora_sistema from dual; HORA_SISTEMA ---------------------16:07:22

Structured Query Language - SQL*PLUS

40

Nota: Prefixos: 0 - Com zeros no inicio $ - Com o caracter $ no inicio B - Valor zerado exibido em branco Sufixos: MI - Quando o nmero for negativo, o sinal - aparecer no final do nmero PR - Quando o nmero for negativo, aparecer no formato <n> . To_Number(char) Converte para o formato NUMBER, um valor (numrico) em CHAR. Exemplo: SQL> select sal + to_number('20') from emp; SAL+TO_NUMBER('20') ------------------5020 2870 2470 2995 1270 1620 1520 ....

Structured Query Language - SQL*PLUS

41

To_Char (date) Converte para o formato CHAR informado, um valor em DATE. Usado freqentemente para formatar campo tipo date. sintaxe: TO_CHAR (coluna_date[,formato_char]) Exemplo: Convertendo para o formato char intercalando um texto SQL> select to_char(hiredate, 2 '"Contratao realizada em" dd/mm/yy "as" hh:mi') 3 Contrataes from emp; Contrataes ---------------------------------------------------------------Contratao realizada em 24/06/94 as 09:30 Contratao realizada em 13/06/94 as 09:00 Formatos vlidos para colunas DATE Uso CC SCC YYYY SYYYY YYY ou YY ou Y YEAR SYEAR Q MM MONTH MON WW W DDD DD D DAY J HH ou HH12 HH24 MI SS SSSSS Descrio Sculo Sculo precedido de - quando for (BC) Ano com 4 dgitos Ano com quatro dgitos precedido de - quando for (BC) Ano com trs, dois ou um digito Ano por extenso Ano por extenso precedido de - quando for (BC) Trimestre Ms em representao numrica (01 - 12) Ms por extenso Abreviao com trs letras do ms por extenso Semana do ano (01-52) Semana do ms (01-05) Dia do ano (01-366) Dia do ms (01-31) Dia da semana (01-07) Dia da semana por extenso formato Juliano, quantidade de dias desde 1 de janeiro de 4712 BC Hora do dia (01-12) Hora do dia (00-23) Minuto (00-59) Segundo (00-59) Segundos aps a meia noite (00-86399)

Structured Query Language - SQL*PLUS

42

Nota BC - AC ou B.C. - A.C. AM - PM ou A.M. - P.M. Prefixos FM Sufixos TH SP

Descrio Indicador de antes de Cristo (BC) ou depois de Cristo (AD); ou Indicador de antes de Cristo (BC) ou depois de Cristo (AD) com ponto. Antes do meio-dia (AM) ou depois do meio-dia (PM); ou Antes do meio-dia (AM) ou depois do meio-dia (PM) com ponto. Descrio Retira brancos esquerda e zeros direita Descrio Nmero ordinal Nmero por extenso

Exemplo: Selecionando o dia de admisso por extenso: SQL> select hiredate, 2 to_char(hiredate, 'ddsp') "Dia de Admisso" 3* from emp HIREDATE --------17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 .... Dia de Admisso -----------------------------------------------seventeen one nine two twenty-eight twenty eight

Structured Query Language - SQL*PLUS

43

Exerccios - 06 1. Atravs do comando select apresentar os resultados semelhantes aos abaixo: a) Da tabela emp, coluna hiredate Data de Contratacao ------------------------------------------------17 de november de 81 01 de may de 81 09 de june de 81 02 de april de 81 28 de september de 81 ..... b) Tabela Ord, colunas ordid e orderdate Pedido: Pedido: Pedido: Pedido: Pedido: ..... 610 611 612 601 602 realizado realizado realizado realizado realizado no: no: no: no: no: 1 1 1 2 2 trimestre trimestre trimestre trimestre trimestre de de de de de 1987 1987 1987 1986 1986

2. Selecione o dia da semana de hoje por extenso ( usar sysdate).

Structured Query Language - SQL*PLUS

44

Domnio de atuao de um comando SQL DML Clausula WHERE Quando uma seleo, alterao ou excluso processada em um tabela, podese informar em quais linhas da tabela o comando deve atuar. A clusula WHERE deve estabelecer a restrio para a escolha das linhas. sintaxe: SELECT coluna_1,coluna_2, ..., coluna_N FROM tabela WHERE coluna_restrio tipo_comparao valor Exemplo: Selecionar apenas o funcionrios do Departamento 10. SQL> select ename, sal from emp 2 where deptno = 10; ENAME SAL ---------- -------KING 5000 CLARK 2450 MILLER 1300 3 rows selected. Tipo de Comparao A clusula WHERE pode trabalhar com vrios tipos de comparao, permitindo combinaes para uma restrio mais especfica para a escolha de linhas. Igualdade Diferena = != ou ^= ou <>

Exemplo: Selecionar departamentos com cdigo diferente de 20. SQL> select * from dept where deptno <> 20; DEPTNO --------10 30 40 DNAME -------------ACCOUNTING SALES OPERATIONS LOC -------NEW YORK CHICAGO BOSTON

3 rows selected.

Structured Query Language - SQL*PLUS

45

Maior que Menor que

> <

e e

Maior ou Igual a Menor ou Igual a

>= <=

Exemplo: Selecionar departamentos com cdigo maior ou igual 20. SQL> select * from dept where deptno >= 20; DEPTNO --------20 30 40 DNAME -------------RESEARCH SALES OPERATIONS LOC ------------DALLAS CHICAGO BOSTON

3 rows selected. Testa contedo nulo is null e is not null

Exemplo 1: Selecionar o funcionrios que tenham registro de comisso. SQL> select ename, job from emp where comm is not null; ENAME ---------MARTIN ALLEN TURNER WARD JOB -------SALESMAN SALESMAN SALESMAN SALESMAN

4 rows selected. Exemplo 2: Selecionar o funcionrios que tenham registro de comisso. SQL> select ename, job from emp where comm = null; no rows selected Neste caso o select no retornara nenhuma linha, pois o null no pode ser comparado usando o operador = . A pesquisa retorna apenas as linhas que Pertencem ao conjunto solicitado: IN (elemento 1, ... , elemento N) NOT IN (elemento 1, ... , elemento N) Exemplo: Selecionar os funcionrios que pertencem aos departamentos 10, 20

Structured Query Language - SQL*PLUS

46

SQL> select empno, ename , deptno from emp where deptno in (10, 20); EMPNO ----7839 7782 7566 7902 7369 7788 7876 7934 ENAME DEPTNO --------- --------KING 10 CLARK 10 JONES 20 FORD 20 SMITH 20 SCOTT 20 ADAMS 20 MILLER 10

8 rows selected. A pesquisa retorna linhas que Pertencem a um intervalo (Inclusive) BETWEEN valor_mnimo NOT BETWEEN valor_mnimo AND valor mximo AND valor mximo

Exemplo: Selecionar o funcionrio com salrios entre 1000 e 2000 SQL> select ename from emp 2 where sal between 1000 and 2000; ENAME -----------MARTIN ALLEN TURNER WARD ADAMS MILLER 6 rows selectd A pesquisa retorna linhas que Contenham os caracteres solicitados: LIKE char NOT LIKE char Nota: No operador LIKE podem ser utilizados os seguintes caracteres: % --> pesquisa de um ou mais caracteres _ --> pesquisa de n caracteres definidos (apenas 2, apenas 1, etc)

Structured Query Language - SQL*PLUS

47

Exemplo 1: SQL> Select ename from emp 2 where ename like '%LL%'; ENAME ---------ALLEN MILLER 2 rows selected. where job like %ANA% where job like _N% where hiredate like __-JUL-__ Exemplo 2: Selecione os funcionrios que tenham apenas 4 caracteres no nome: SQL> select ename, job from emp 2 where ename like '____' /* 4 underscore */ ENAME ---------KING WARD FORD JOB --------PRESIDENT SALESMAN ANALYST

3 rows selected. Testar se entre as linhas da tabela alguma atende as especificaes desejadas EXISTS NOT EXISTS Exemplo: SQL> select 'No encontrou departamento 50' from dual 2 where not exists (select * from emp 3* where deptno = 50) 'NAOENCONTROUDEPARTAMENTO50' -----------------------------------------------------Nao encontrou departamento 50 1 row selected.

Structured Query Language - SQL*PLUS

48

Ordenando resultados de uma seleo A ordem em que as linhas foram includas na tabela no importante, a clusula ORDER BY do comando SELECT permite exibir as tuplas do resultado, na ordem desejada pelo usurio. Sintaxe: SELECT coluna1,coluna2, ..., coluna_n FROM Tabela [WHERE coluna_restrio Tipo_comparao valor] ORDER BY coluna_ordenao [DESC] Nota: Order by ascendente por default, para se ter uma seleo decrecente, use a palavra DESC ao lado direito da coluna selecionada na clusula ORDER BY. Pode-se classificar o resultado do seleo sem que a coluna esteja referenciada no select. Exemplo: Classificando pelo nome em ordem crescente. SQL> select empno, ename from emp 2 order by ename; EMPNO ---------7876 7499 7698 7782 7902 7900 7566 .... ENAME ---------ADAMS ALLEN BLAKE CLARK FORD JAMES JONES

Exemplo 2: Ordenando o resultado por ordem numrica decrescente EMPNO --------7934 7902 7900 7876 7844 7839 7788 7782 .... ENAME ---------MILLER FORD JAMES ADAMS TURNER KING SCOTT CLARK

Structured Query Language - SQL*PLUS

49

Operadores Lgicos usados para Combinar mais de uma comparao

A restrio pode ser composta por uma ou mais comparaes, estas devem ser combinadas usando operadores lgicos AND, OR e NOT

Comparao1 e Comparao2 AND Exemplo:Selecionar funcionrios do deptno 20 que sejam analistas SQL> Select ename from emp where deptno = 20 and job = ANALYST ; ENAME ---------FORD SCOTT 2 rows selected.

Comparao1 ou Comparao 2

OR

Exemplo: Selecionar funcionrios que sejam do deptno 20 ou analistas. SQL> Select ename from emp where deptno = 20 OR job = ANALYST ; ENAME ---------JONES FORD SMITH SCOTT ADAMS 5 rows selected.

Structured Query Language - SQL*PLUS

50

No deve ser atendida Comparao Exemplo: SQL> select ename from emp 2 where not ( deptno = 30); ENAME ---------KING CLARK JONES FORD SMITH SCOTT ADAMS MILLER 8 rows selected.

NOT

Comparao com todos os elementos do conjunto { =, !=, >, <, >=, <=} ALL Exemplo: Selecionar os funcionrios com departamento diferente de todos da lista. SQL> select ename, deptno from emp 2 where deptno <> all (10,20); ENAME DEPTNO ---------- --------BLAKE 30 MARTIN 30 ALLEN 30 TURNER 30 JAMES 30 WARD 30 Comparao com qualquer elemento do conjunto { =, !=, >, <, >=, <=} ANY Exemplo: Selecionar funcionrios com departamento igual a qualquer um da lista. SQL> select ename, deptno from emp 2 where deptno = any (10,20);

Structured Query Language - SQL*PLUS

51

ENAME DEPTNO ---------- --------KING 10 CLARK 10 JONES 20 FORD 20 SMITH 20 SCOTT 20 ADAMS 20 MILLER 10

Structured Query Language - SQL*PLUS

52

Exerccios - 07 1. Selecione os funcionrios, codigo e nome, que tenham sido contratados entre o perodo de 01/Maio/81 e 31/Dezembro/81. 2. Selecionar o presidente da empresa atravs da coluna mgr (codigo do gerente). 3. Selecionar funcionrios que no tenham o cargo iniciado com A e No sejam do departamento 10. 4. Selecionar funcionrios que tem salrios maiores que 1500 que sejam gerentes(MANAGER) , ou funcionrios que sejam vendedores (SALESMAN). 5. Selecionar funcionrios que tem salrios maiores que 1500 que sejam gerentes(MANAGER) ou vendedores (SALESMAN). 6. Selecionar os pedidos (ordid) da tabela pedido (ord) que no tenham sido entregues num prazo mnimo de 10 dias, ordenando por cliente (custid).

Structured Query Language - SQL*PLUS

53

FUNES

Funes aplicveis a valores Alfanumricos As funes relacionadas neste captulo devem ser aplicadas a colunas alfanumricas e retornam tipos CHAR ou NUMBER.

INITCAP(char) Retorna as iniciais de cada palavra em maisculas o restante da palavra em minsculas. Exemplo: SQL> select initcap(dname), initcap('CURSO SQL') 2* from dept; INITCAP(DNAME) -------------Accounting Research Sales Operations LOWER(char) Retorna todas as letras de todas as palavras em minsculas. Exemplo: SQL> select lower(dname), lower('CURSO SQL') 2* from dept; LOWER(DNAME) -----------accounting research sales operations UPPER(char) Retorna todas as letras de todas as palavras em maisculas. Exemplo: LOWER('CUR ---------curso sql curso sql curso sql curso sql INITCAP(' --------Curso Sql Curso Sql Curso Sql Curso Sql

Structured Query Language - SQL*PLUS

54

SQL> select upper(dname), upper('CURSO SQL') 2* from dept; UPPER(DNAME) -----------ACCOUNTING RESEARCH SALES OPERATIONS UPPER('CUR ---------CURSO SQL CURSO SQL CURSO SQL CURSO SQL

SUBSTR(char, posicao_inicial[,qtde_caracteres]) Retorna uma parte do valor original. Exemplo: SQL> select substr(dname,1,5), substr('Curso SQL',6,4) 2* from dept; SUBST SUBS ----- ---ACCOU SQL RESEA SQL SALES SQL OPERA SQL INSTR(char, char [,posicao_inicial, n_ocorrencia]) Retorna a n_sima ocorrncia de um determinado string. Exemplo: SQL> select ename, instr(ename,'A') from emp; ENAME INSTR(ENAME,'A') ---------- ---------------KING 0 BLAKE 3 CLARK 3 JONES 0 MARTIN 2 ALLEN 1 TURNER 0 JAMES 2 WARD 2 FORD 0

Structured Query Language - SQL*PLUS

55

LENGTH(char) Retorna o total de caracteres existentes. Exemplo: SQL> select length(dname), length('Curso SQL') 2* from dept; LENGTH(DNAME) LENGTH('CURSOSQL') ------------- -----------------10 9 8 9 5 9 10 9 REPLACE(char, texto_antigo , texto_novo) Retorna o valor original, com todas as ocorrncias do texto antigo trocadas pelo texto novo. Exemplo: SQL> select replace('JACK and JUE', 'J', 'BL') Alterado 2* from dual; ALTERADO -------------BLACK and BLUE RPAD( char, tamanho{, char]) Retorna o valor original, preenchido a direita com o caracter informado, quantas vezes forem necessrias at que se complete o tamanho estabelecido. Exemplo: SQL> select rpad(dname, 14 , '*' ) Departamento 2* from dept; DEPARTAMENTO -------------ACCOUNTING**** RESEARCH****** SALES********* OPERATIONS****

Structured Query Language - SQL*PLUS

56

LPAD( char, tamanho{, char]) Retorna o valor original, preenchido a esquerda com o caracter informado, quantas vezes forem necessrias at que se complete o tamanho estabelecido. Exemplo: SQL> select lpad(dname,14,'*') Departamento 2* from dept; DEPARTAMENTO -------------****ACCOUNTING ******RESEARCH *********SALES ****OPERATIONS Exemplo 2: Apresentando descricao do departamento alinhado a direita. SQL> select lpad(dname,14) from dept; LPAD(DNAME,14) -------------ACCOUNTING RESEARCH SALES OPERATIONS SOUNDEX(char) Retorna a representao fontica das palavras que compem o valor informado. Exemplo: SQL> select ename from emp 2* where soundex(ename) = soundex('smythe'); ENAME ---------SMITH RTRIM(char [,conjunto_de_caracteres]) Retorna o string com os caracteres finais removidos at o primeiro caracter no contido no conjunto de caracteres informados, inicia a pesquisa pela direita. Se no for especificado o conjunto de caracteres, assumir por default um branco.

Structured Query Language - SQL*PLUS

57

Exemplo: SQL> select dname, ltrim(dname,'A'), ltrim(dname,'ASOP') 2* from dept; DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LTRIM(DNAME,'A -------------CCOUNTING RESEARCH SALES OPERATIONS LTRIM(DNAME,'A -------------CCOUNTING RESEARCH LES ERATIONS

LTRIM(char [,conjunto_de_caracteres]) Retorna o string com os caracteres iniciais removidos at o primeiro caracter no contido no conjunto de caracteres informados, inicia a pesquisa pela esquerda. Se no for especificado o conjunto de caracteres, assumir por default um branco. Exemplo: SQL> select dname, rtrim(dname,'S'), rtrim(dname,'GHS') 2 from dept; DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS RTRIM(DNAME,'S -------------ACCOUNTING RESEARCH SALE OPERATION RTRIM(DNAME,'G -------------ACCOUNTIN RESEARC SALE OPERATION

TRANSLATE(char, caracter_antigo, caracter_novo) Retorna o string com todos os caracteres informados substitudos. Exemplo: SQL> select ename, translate(ename,'C', 'P') , 2* job, translate(job, 'AR', 'IT') from emp; ENAME ---------KING BLAKE CLARK ALLEN JAMES ..... TRANSLATE( ---------KING BLAKE PLARK ALLEN JAMES JOB --------PRESIDENT MANAGER MANAGER SALESMAN CLERK TRANSLATE --------PTESIDENT MINIGET MINIGET SILESMIN CLETK

Structured Query Language - SQL*PLUS

58

Exerccios - 08

1. Selecionar a descrio do departamento centralizada na tela. Nome ---------------------------------------------------------------ACCOUNTING RESEARCH SALES OPERATIONS 2. Selecionar o produto, apresentando a descrio apenas at a palavra TENNIS . Descricao -----------------------------ACE TENNIS RACKET I ACE TENNIS RACKET II ACE TENNIS BALLS-3 PACK ACE TENNIS BALLS-6 PACK ACE TENNIS NET SP TENNIS RACKET SP JUNIOR RACKET RH: "GUIDE TO TENNIS" SB ENERGY BAR-6 PACK SB VITA SNACK-6 PACK Descricao -----------------------------ACE ACE ACE ACE ACE SP RH: "GUIDE TO

Structured Query Language - SQL*PLUS

59

Funes aplicveis a Valores Numricos As funes relacionadas neste captulo devem ser aplicadas a colunas do tipo NUMBER, sendo o retorno do tipo NUMBER.

SIGN(number) Testa o contedo de uma coluna numrica: se for negativo, retorna -1, se for 0 retorna 0, se for positivo retorna 1 ou se for nulo retorna null. Exemplo: SQL> select sign(-100), sign(150), sign( 150 - 150) from dual; SIGN(-100) SIGN(150) SIGN(150-150) ---------- --------- -------------1 1 0

ABS(number) Retorna o valor absoluto de um nmero. Exemplo: SQL> select abs(100 - 150) vl_abs from dual; VL_ABS --------50

CEIL(number) Retorna o menor nmero inteiro, que seja maior ou igual ao nmero Exemplo: SQL> select ceil(14.4) from dual; CEIL(14.4) ---------15

Structured Query Language - SQL*PLUS

60

FLOOR(number) Retorna o maior nmero inteiro, que seja menor ou igual ao nmero Exemplo: SQL> select floor(14.4) from dual; CEIL(14.4) ---------14 MOD(dividendo, divisor) Retorna o resto da diviso de um nmero por outro. O primeiro valor informado o dividendo e o segundo o divisor. Exemplo: SQL> select mod(10,3) from dual; MOD(10,3) --------1

POWER(base, expoente) Retorna o resultado de uma potenciao, o primeiro valor informado a base e o segundo, o expoente. Exemplo: SQL> select power(5,2) from dual; POWER(5,2) ---------25

SQRT(number) Retorna a raiz quadrada do nmero. Exemplo: SQL> select SQRT(16) from dual;

Structured Query Language - SQL*PLUS

61

SQRT(16) --------4

ROUND(number[,n_decimal]) Retorna o nmero arredondado em n casas decimais (se for suprimido, considera INTEIRO). Exemplo: SQL> select round(123.456, 2) from dual; ROUND(123.456,2) ---------------123.46

TRUNC(number[,n_decimal]) Retorna o nmero truncado em n casas decimais. Exemplo: SQL> select trunc(123.456 , 2) from dual; TRUNC(123.456,2) ---------------123.45

OUTRAS FUNES: SIN(number) COS(number) TAN(number) LN(number) LOG(m,n) Seno de um nmero Coseno Tangente Logaritmo Natural Logaritmo da base m por n

Structured Query Language - SQL*PLUS

62

Exerccios - 09

1. Selecionar os Pedidos e data do pedido da tabela Ord que foram realizados em dias pares (orderdate).

2. Apresentar o valor total do pedido e o valor total do pedido acrescido em 10%, arredondado em 2 casas decimais dos pedidos realizados em Fev/87. 3. Selecionar o cdigo e descrio dos produtos, alinhada direta, ordenados de forma decrescente pelo tamanho do nome.

Structured Query Language - SQL*PLUS

63

Funes aplicveis a Datas

As funes relacionadas neste captulo devem ser aplicadas a colunas do tipo DATE, o retorno pode ser do tipo DATE ou NUMBER. SYSDATE Retorna a data e a hora corrente. Exemplo: SQL> select sysdate from dual; SYSDATE --------13-JUL-96 ADD_MONTHS(data, nmero_meses) Retorna a data somada ou subtrada de n meses. Exemplo: SQL> select hiredate, add_months(hiredate, 2) "2 meses depois" 2 from emp; HIREDATE --------17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 .... 2 meses d --------17-JAN-82 01-JUL-81 09-AUG-81 02-JUN-81 28-NOV-81 20-APR-81 08-NOV-81

MONTHS_BETWEEN(data, data) Retorna a quantidade de meses existentes entre duas datas. Exemplo: SQL> select hiredate, 2 months_between(to_date('10-JUL-82','dd/mon/yy'), hiredate) diferenca 3* from emp

Structured Query Language - SQL*PLUS

64

HIREDATE --------17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 ....

DIFERENCA --------7.7741935 14.290323 13.032258 15.258065 9.4193548 16.677419 10.064516

LAST_DAY(data) Retorna a data que corresponde ao ultimo dia do ms Exemplo: SQL> select sysdate, last_day(sysdate) "Ultimo dia", 2 last_day(sysdate) - sysdate "Diferenca" 3* from dual SYSDATE Ultimo di Diferenca --------- --------- --------13-SEP-96 30-SEP-96 17

NEXT_DAY(data) Retorna a data correspondente ao prximo dia da semana seguinte Exemplo: SQL> select sysdate, next_day(sysdate, 'FRIDAY') from dual; SYSDATE NEXT_DAY( --------- --------13-SEP-96 20-SEP-96

TRUNC(data[,formato_char]) Retorna a data correspondente ao incio do perodo segundo o formato informado.

Structured Query Language - SQL*PLUS

65

Exemplo: SQL> select trunc(sysdate) "dia", 2 trunc(sysdate,'mm') "Mes", 3 trunc(sysdate,'yy') "Ano" 4* from dual dia Mes Ano --------- --------- --------13-SEP-96 01-SEP-96 01-JAN-96

ROUND(data[,formato_char]) Retorna a data correspondente ao incio do perodo (formato informado) corrente (se dia entre 1 e 15) ou seguinte (se dia maior que 15). Exemplo: SQL> select round(sysdate) "dia", 2 round(sysdate,'mm') "Mes", 3 round(sysdate,'yy') "Ano" 4* from dual dia Mes Ano --------- --------- --------14-SEP-96 01-SEP-96 01-JAN-97

Structured Query Language - SQL*PLUS

66

Exerccios - 10

1. Os funcionrios contratados at o dia 15, recebem seus salrios na ltima sexta feira do ms, os demais na ltima sexta do mes seguinte. Desta forma identifique os funcionrios, data admisso e data de pagamento.

2. Selecione da tabela emp, o nome do funcionrio e total de dias existentes entre sua admisso e o ultimo dia do ms de admisso, ordenando pelos dias pares.

3. Selecione da tabela emp, o nome do funcionrio e total de dias existentes entre sua admisso e o ltimo dia do ano de admisso.

Structured Query Language - SQL*PLUS

67

Agrupando resultados de uma seleo GROUP BY Os dados que so recuperados numa seleo podem ser agrupados de acordo com um critrio especfico. O agrupamento implica na exibio de uma e somente uma linha por grupo; alm disso, s permitido selecionar as colunas especificadas na clusula GROUP BY e/ou funes de grupo. A clusula GROUP BY do comando SELECT, determina o critrio a ser utilizado na formao dos grupos. Sintaxe: SELECT [coluna1,]funcao(coluna2) FROM tabela [WHERE coluna_restrio Tipo_comparao valor] GROUP BY coluna_agrupamento [ORDER BY coluna [ASC/DESC]] Nota: Pode-se fazer uso de vrias funes, que por definio j selecionam grupos de linhas, gerando apenas um resultado para este grupo. Funes de Grupo COUNT({* / [DISTINCT / ALL ] nome_coluna / expresso}) Retorna o total de elementos do grupo Exemplo: SQL> select count(*) from emp; COUNT(*) --------14 1 row selected. SQL> select count( distinct job ) "Cargos" 2* from emp; Cargos --------5 1 row selected.

Structured Query Language - SQL*PLUS

68

SUM([DISTINCT / ALL] number) Retorna o somatrio de uma coluna. Exemplo: SQL> select sum(sal), job from emp 2* group by job; SUM(SAL) --------6000 4150 8275 5000 5600 JOB --------ANALYST CLERK MANAGER PRESIDENT SALESMAN

5 rows selected. Exemplo: SQL> select deptno, sum(sal) from emp 2* group by deptno; DEPTNO SUM(SAL) --------- --------10 8750 20 10875 30 9400 3 rows selected. MIN( [DISTINCT / ALL ] {nome_coluna / expresso}) Retorna o menor valor de uma coluna. Exemplo: SQL> select min(sal) "Menor Salario" 2* from emp; Menor Salario ------------800 1 row selected.

Structured Query Language - SQL*PLUS

69

Exemplo 2: Selecionar o funcionrio que com maior salrio da empresa. SQL> select ename, sal from emp 2* where sal = (select max(sal) from emp); ENAME SAL ---------- --------KING 5000 1 row selected.

MAX( [DISTINCT / ALL ] {nome_coluna / expresso}) Retorna o maior valor de uma coluna. Exemplo: Selecionar o funcionrio contratado mais recentemente. SQL> select max(hiredate) "Ultima Admissao" 2* from emp; Ultima Ad --------12-JAN-83 1 row selected.

AVG( [DISTINCT / ALL ] {nome_coluna / expresso}) Retorna a mdia aritmtica de uma coluna. Exemplo: SQL> select deptno, avg(sal) from emp 2 group by deptno 3* order by 1 DEPTNO AVG(SAL) --------- --------10 2916.6667 20 2175 30 1566.6667 3 rows selected.

Structured Query Language - SQL*PLUS

70

STDDEV( [DISTINCT / ALL ] {nome_coluna / expresso}) Retorna o desvio padro de uma coluna. Exemplo: SQL> select stddev(sal) 2* from emp; STDDEV(SAL) ----------1182.5032 1 row selected.

VARIANCE( [DISTINCT / ALL ] {nome_coluna / expresso}) Retorna a varincia de uma coluna. Exemplo: SQL> select variance(sal) 2* from emp; VARIANCE(SAL) ------------1398313.9 1 row selected.

Structured Query Language - SQL*PLUS

71

Selecionando Grupos HAVING Pode-se tambm determinar para quais grupos sero exibidos os dados selecionados; basta indicar na clusula HAVING o critrio a ser utilizado para essa determinao. A clusula HAVING primeiramente agrupa e depois seleciona os grupos que correspondem ao critrio requisitado; esta clusula proporciona maior rapidez j que o teste de seleo feito sobre grupos e no a partir de linhas. Sintaxe: SELECT coluna1, funcao(coluna2) FROM tabela GROUP BY coluna_1 HAVING coluna_restrio Tipo_comparao valor [ORDER BY coluna_ordenao [ASC/DESC]] nota: Sempre deve-se indicar a coluna de agrupamento (GROUP BY) e a seleo de agrupamento (HAVING). Exemplo: SQL> select deptno, sum(sal) from emp 2 group by deptno 3* having sum(sal) > 9000; DEPTNO SUM(SAL) --------- --------20 10875 30 9400 2 rows selected.

Structured Query Language - SQL*PLUS

72

Exerccios - 11

1. Selecione o cdigo e a mdia salarial arrendondada em 2 casas decimais e no formato 999,999.99, dos departamentos que possuem mdia salarial maior que 2000.

2. Selecione o cdigo e a mdia salarial dos departamentos que possuem mais de trs funcionrios.

3. Selecionar o menor e o maior salrio, a mdia salarial e o nmero de funcionrios dentre os vendedores ( SALESMAN).

4. Selecionar pedido(ordid) e a data do pedido (orderdate) mais recente da tabela ord.

5. Selecione os produtos (product) e quantidade total pedida (qty) na tabela item, ordenando pelo quantidade total.

Structured Query Language - SQL*PLUS

73

Funes Genricas As funes vistas nesta sesso podem ser aplicadas a qualquer tipo de dado. DECODE(valor, comparao_1, valor_1[, comparao_N, valor_N], [valor_default]) Retorna um valor decodificado de acordo com uma comparao. Exemplo: SQL> select ename "Nome", 2 decode(job, 'PRESIDENT','Presidente', 3 'MANAGER', 'Gerente', 4 'SALESMAN', 'Vendedor', 'Outros') "Cargo" 5 from emp 6* order by 1 Nome ---------ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD Cargo ---------Outros Vendedor Gerente Gerente Outros Outros Gerente Presidente Vendedor Outros Outros Outros Vendedor Vendedor

14 rows selected. GREATEST(valor_1[, valor_2[, valor_3,...]]) Retorna maior valor de uma lista Exemplo: SQLselect ename Nome , decode(greatest(sal,1500), 2 sal, 'Salario Alto', 3 'Salario baixo') Tipo de Salar 4* from emp;

Structured Query Language - SQL*PLUS

74

Nome ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT ADAMS MILLER

Tipo de Salar ------------Salario Alto Salario Alto Salario Alto Salario Alto Salario baixo Salario Alto Salario Alto Salario baixo Salario baixo Salario Alto Salario baixo Salario Alto Salario baixo Salario baixo

14 rows selected.

LEAST(valor_1[, valor_2[, valor_3,...]]) Retorna o menor valor de uma lista Exemplo: SQL> select least( 11, 50, 30, 95, 12) "Menor valor" 2* from dual Menor valor ----------11 1 row selected. NVL(valor,valor_a_ser_recuperado) Retorna o valor especificado pelo usurio caso o valor seja nulo, do contrrio retorna o valor original. Exemplo: SQL> select sal, comm, sal + comm from emp;

Structured Query Language - SQL*PLUS

75

SAL COMM SAL+COMM --------- --------- --------5000 2850 1250 1400 2650 1600 300 1900 1500 0 1500 950 1250 500 1750 3000 800 SQL> select sal, comm, sal + nvl(comm,0) 2* from emp SAL COMM SAL+NVL(COMM,0) --------- --------- --------------5000 5000 2850 2850 1250 1400 2650 1600 300 1900 1500 0 1500 950 950 1250 500 1750 3000 3000 800 800

USER Retorna o usurio ORACLE logado: Exemplo: SQL> select user from dual; USER -------------SCOTT

Structured Query Language - SQL*PLUS

76

UID Retorna um nmero inteiro que identifica o usurio ORACLE corrente Exemplo: SQL> select UID from dual; UID ---------5645

Structured Query Language - SQL*PLUS

77

Exerccios - 12 1. Selecionar nome, cargo e salrio aumentado de acordo coma tabela: Analista Atendente Gerente - ANALYST 10% - CLERK 15% - MANAGER 20%

2. Selecione o maior valor entre salrio e comisso para os funcionrios;

Structured Query Language - SQL*PLUS

78

Captulo 6 RECUPERANDO DADOS DE VRIAS TABELAS

possvel exibir numa mesma tupla de resultado, dados que estejam em tabelas diferentes; este tipo de operao chamada de JOIN. Quando o JOIN realizado entre duas tabelas, sero criados os pares ordenados de acordo com: A = { 1, 2, 3, 4 } B = { 1, 3 } Resultado A B = { 1 1, 1 3, 2 1, 2 3, 3 1, 3 3, 4 1, 4 3 } No entanto somente os pares ordenados em que o elemento da tabela A igual ao elemento da tabela B so teis. Por esta razo, todo JOIN deve possuir esta igualdade entre os pares ordenados, expressa na clusula WHERE. sintaxe: SELECT [ALL / DISTINCT] {[nome_da_tabela] * } [nome_da_tabela.]nome_da_coluna[,funo([nome_da_tabela.] nome_da_coluna)] FROM nome_da_tabela, nome_da_tabela [WHERE ...] [GROUP BY ...] [HAVING ...] [ORDER BY ...]

EQUI-JOIN ou RELAO DIRETA Quando h relacionamento de colunas entre duas ou mais tabelas. Exemplo: SQL> Select empno, dept.deptno, dname 2 from emp, dept 3 where dept.deptno = emp.deptno 4* order by dname

Structured Query Language - SQL*PLUS

79

EMPNO DEPTNO DNAME --------- --------- -------------7839 10 ACCOUNTING 7782 10 ACCOUNTING 7566 20 RESEARCH 7788 20 RESEARCH 7876 20 RESEARCH 7902 20 RESEARCH 7499 30 SALES 7844 30 SALES 7900 30 SALES .... NON-EQUI-JOIN ou RELAO INDIRETA: Quando no ha coluna que se relacione com uma coluna de uma outra tabela. Exemplo: SQL> select ename, sal , grade 2 from emp e, salgrade s 3 where e.sal between s.losal and s.hisal; ENAME SAL GRADE ---------- --------- --------JAMES 950 1 SMITH 800 1 ADAMS 1100 1 MARTIN 1250 2 MILLER 1300 2 ALLEN 1600 3 TURNER 1500 3 BLAKE 2850 4 .... OTHER JOIN Quando uma das tabelas no contm todos os elementos existentes na outra. Neste caso algumas linhas no sero recuperadas. Para que isto no ocorra, utiliza-se o (+) ao lado da tabela onde os elementos esto faltando. Exemplo: SQL> SELECT ename, b.deptno, dname FROM emp a, dept d WHERE a.deptno (+) = b.deptno;

Structured Query Language - SQL*PLUS

80

DEPTNO --------10 10 10 20 20 20 20 20 30 30 30 30 30 30 40

DNAME SAL -------------- --------ACCOUNTING 5000 ACCOUNTING 2450 ACCOUNTING 1300 RESEARCH 2975 RESEARCH 3000 RESEARCH 1100 RESEARCH 800 RESEARCH 3000 SALES 2850 SALES 1250 SALES 1600 SALES 1500 SALES 950 SALES 1250 OPERATIONS

15 rows selected. SQL> SELECT count(empno), dname FROM emp, dept WHERE emp.deptno (+) = dept.deptno GROUP BY dname; Nr Funcionrios --------------3 0 5 6 Departamento -------------ACCOUNTING OPERATIONS RESEARCH SALES

Nota: count(empno) tem que ser um campo que aparea na tabela que esteja faltando o dado.

Structured Query Language - SQL*PLUS

81

Operaes com conjuntos Todo resultado de uma seleo pode ser definido como um conjunto. A estes conjuntos podem-se aplicar as operaes bsicas da teoria de conjuntos, como: UNION (Distinct/All) Distinct - Permite unir os elementos resultantes de duas selees de forma que apaream oriundos de apenas uma (traz todas as linhas dos conjuntos sem repeti-las). Resultado: A U B = {1,2,3,4} All - Permite unir os elementos resultantes de duas selees de forma que apaream oriundos de uma nica seleo (traz todas as linhas dos conjuntos, mesmo as repeti-las). Resultado: A U B = {1,2,3,4,1,3} Exemplo: SQL> select empno codigo, ename nome from emp 2 union 3 select deptno codigo, dname nome from dept 4* order by 2; CODIGO --------10 7876 7499 7698 7782 7902 7900 7566 7839 7654 7934 40 20 30 7788 7369 7844 7521 NOME -------------ACCOUNTING ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER OPERATIONS RESEARCH SALES SCOTT SMITH TURNER WARD

18 rows selected.

Structured Query Language - SQL*PLUS

82

INTERSECT Permite exibir os elementos resultantes de duas selees que sejam comuns s duas (retorna as linhas comuns as duas queries requeridas). Resultado: A Exemplo: SQL> select prodid, descrip from product 2 where descrip like '%RACKET%' 3 intersect 4 select prodid, descrip from product; PRODID --------100860 100861 101860 101863 DESCRIP -----------------------------ACE TENNIS RACKET I ACE TENNIS RACKET II SP TENNIS RACKET SP JUNIOR RACKET B = {1,3 }

4 rows selected. MINUS Permite mostrar os elementos resultantes de uma seleo que no estejam contidos na outra (recupera as linhas que no tem correspondncia). Resultado: A - B = {2,4} SQL> select prodid, descrip from product 2 minus 3 select prodid, descrip from product 4* where descrip like '%RACKET%' PRODID --------100870 100871 100890 102130 200376 200380 DESCRIP -----------------------------ACE TENNIS BALLS-3 PACK ACE TENNIS BALLS-6 PACK ACE TENNIS NET RH: "GUIDE TO TENNIS" SB ENERGY BAR-6 PACK SB VITA SNACK-6 PACK

6 rows selected.

Structured Query Language - SQL*PLUS

83

SUBQUERY Quando a pesquisa depende dos prprios dados da tabela. Exemplo: Selecione os funcionrios com cargo igual ao cargo de JONES: SQL> Select job from emp 2 where ename = JONES ; JOB --------MANAGER Exemplo: SQL> select ename, job from emp 2 where job = (select job from emp 3 where ename = JONES ) ; ENAME ----JONES BLAKE CLARK JOB --------MANAGER MANAGER MANAGER

SUBQUERY- CORRELATA Usa parmetros da query principal Exemplo: Selecione os funcionrios que tenham salrios maiores que a media salarial do departamento. SQL> select ename from emp a 2 where sal > ( select avg(sal) 3 from emp b 4 where b.deptno = a.deptno) 5 order by ename; ENAME ----ALLEN BLAKE

Structured Query Language - SQL*PLUS

84

Exerccios - 13

1. Selecione todos os funcionrios que pertecem a grade salarial 3.

2. Selecione todos os departamentos e total de salrios de cada um deles.

3. Selecionar o codigo, nome dos cliente que possuem mais de 3 pedidos, classificando pela qtde de pedidos .

4. selecionar funcionrios que tenham cargos iguais aos dos funcionrios do departamento 30.

5. selecionar funcionrios com o mesmo cargo de JONES ou com salrio maior ou igual ao salrio de FORD, inclusive.

6. Selecione da tabela departamento (dept) os nome e local dos departamentos que no possuem funcionrios.

7. Selecionar o cargo, nome e salrio dos funcionrios que tm os maiores salrios de seus departamentos em ordem decrescente de salrio.

Structured Query Language - SQL*PLUS

85

Captulo 7 ATUALIZAO DE DADOS


De uma forma geral, em uma transao pode-se executar incluses, selees, alteraes e excluses. Quando a transao finalizada com o COMMIT, estas modificaes tomam-se disponveis para todos os usurios que tenham acesso a esses dados. As vezes, as alteraes realizadas por outros usurios podem distorcer o resultado das selees feitas em uma sesso. Por exemplo, em caso de relatrios que envolvam nmeros. possvel a um usurio ter uma viso congelada do RDBMS em um determinado momento, ou seja, desconsiderando quaisquer modificaes que por ventura venham a ser feitas por outros usurios. O comando SET TRANSACTION determina o inicio deste processo que encerrado pelo COMMIT ou ROLLBACK.

SET TRANSACTION: sintaxe: SET TRANSACTION (READ ONLY l READ WRITE)

Atualizando dados de uma tabela UPDATE usado para atualizar uma ou mais colunas de tabela ao mesmo tempo.. sintaxe: UPDATE nome_tabela SET nome_coluna = valor [, nome_coluna = valor] WHERE <condio> Exemplo 1: Retirar comisso dos funcionrios que No sejam gerentes ou vendedores. SQL> Update emp set comm = null where job not in ( MANAGER , SALES );

Structured Query Language - SQL*PLUS

86

Exemplo 2: Alterar os salrios e comisses com a mdia de cada departamento SQL> update emp e 2 set (sal,comm) = (select avg(sal) , avg(comm) 3 from emp 4 where deptno = e.deptno) 5/

Structured Query Language - SQL*PLUS

87

Captulo 8 EXCLUSO DE LINHAS DE UMA TABELA


Delete Comando usado para excluir uma ou mais linhas de uma tabela. sintaxe: DELETE [FROM] nome_tabela WHERE <Condio> Exemplo 1: SQL> Delete salgrade; 5 rows deleted. exemplo 2: SQL> Delete from emp where job = SALESMAN comm < 100;

and

Structured Query Language - SQL*PLUS

88

Exerccios - 14 1. Aumentar o valor possuem comisso. das comisses dos funcionrios em 10%, somente dos que

2. Alterar a data de envio (shipdate) da tabela ord para 30 dias depois da data do pedido (orderdate).

3. Remover funcionrios dos departamentos que no tm sua somatria de salrios maiores que 10000.

4. Remover os departamentos da tabela dept que no possuem funcionrios.

Structured Query Language - SQL*PLUS

89

Captulo 9 MANIPULANDO OBJETOS DO RDBMS


Uma vez criadas a(s) tabela(s) no Banco de Dados, pode-se criar comentrios, documentao sobre as tabelas e colunas. Esta documentao ser armazenada no dicionrio de dados do ORACLE. E para recuperar esta documentao devero ser acessadas as tabelas: ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS Para todas as colunas existentes no Banco de Dados. Para todas as colunas criadas por um usurio. Para todas as tabelas existentes no Banco de Dados. Para todas as tabelas criadas por um usurio.

Para criar um comentrio em alguma tabela e/ou coluna, deve-se utilizar o comando COMMENT. sintaxe: COMMENT ON [TABLE nome_da_tabela | COLUMN nome_da_tabela.nome_da_coluna] IS 'comentrio' Exemplo 1: SQL> comment on table emp is 'text'; Comment created. Exemplo 2: SQL> comment on column emp.comm is 'Comisso dos vendedores e gerentes'; Comment created. Para retirar o comentrio de alguma tabela e/ou coluna deve-se gravar um comentrio com espaos. Exemplo 3: SQL> comment on column emp.comm is ' '; Comment created.

Structured Query Language - SQL*PLUS

90

Criando uma Tabela a partir de outra Tabela No h um comando que exclua uma coluna de uma tabela. Se a coluna for desnecessria, e a tabela j possuir dados, deve-se criar outra tabela herdando as linhas j existentes (Comando CREATE TABLE ... AS SELECT ...); depois basta excluir a estrutura da tabela anterior (antiga) utilizando o comando DROP TABLE e renomear a nova com o comando RENAME. Sintaxe: CREATE TABLE nome_tabela (nome_coluna [restrio] [, nome_coluna [restrio]] [,restries]) AS SELECT ... Exemplo: SQL> Create table temporaria 2 (codigo, nome, dt_admisso, salario) 3 as 4 select empno, ename, hiredate, sal 5* from emp; Table created. Eliminando Tabelas DROP TABLE possvel remover a definio das tabelas ORACLE, usando DROP TABLE, (inclusive se a tabela possuir dados, por isso e importante verificar suas constraints e constraints com outras tabelas). Sintaxe: DROP TABLE nome_tabela [ON CASCADE CONSTRAINTS] Nota: Ao eliminar uma tabela: - Todos os dados sero eliminados; - As views permanecero, mas se tornaro invalidas; - Algumas transaes pendentes sero efetivadas; - Somente o criador da tabela ou o DBA pode eliminar a tabela; - A opaco de cascade constraints garante que a tabela seja removida mesmo que exista integridade referencial com outra tabela;

Structured Query Language - SQL*PLUS

91

Exemplo: SQL> Drop table salgrade; Table dropped. Renomeando Tabelas RENAME sintaxe: RENAME nome_tabela_antiga TO nome_tabela_nova Exemplo: SQL> Rename grade_salarial to salgrade; Table renamed. Incluindo Linhas em uma tabela a partir de outra tabela Quando uma tabela j contem dados, no e permitida a alterao do tipo de dado de uma coluna; para realizar tal modificao e necessrio criar outra tabela e depois incluir as linhas. sintaxe: INSERT INTO nome_tabela [(nome_coluna [, nome_coluna])] SELECT ... Exemplo: SQL> delete temporaria; 14 rows deleted. SQL> insert into temporaria 2 select empno, ename, hiredate, sal from emp 3 where sal > 1100; 11 rows created.

Structured Query Language - SQL*PLUS

92

Create View (Vises) As vezes uma tabela possui colunas que no devem ser visveis por todos os usurios; desta forma e necessrio criar uma viso parcial da tabela. Uma view uma tabela lgica que no ocupa espao no Banco de Dados, pode ser composta de linhas de uma ou mais tabelas, agrupadas ou no. As views no armazenam dados. Elas montam um imagem da(s) coluna(s) da(s) tabela(s) selecionada(s). sintaxe: CREATE [OR REPLACE] {FORCE/NOFORCE] VIEW nome_view [coluna_1 [,coluna_2], [ coluna_n] AS subquery; Nota: De forma geral, em uma view e permitido selecionar, atualizar, excluir e incluir dados. Porm, nas views que estiverem em um dos casos abaixo, somente o select permitido - JOIN de uma ou mais tabelas, GROUP BY, - DISTINCT (select Distinct ...), ALIAS - Expresses do tipo concatenao, converso, funes de grupo, ... REPLACE - Se a viso j existir recria com o mesmo nome FORCE - Cria a viso mesmo se a tabela referenciada no existir Exemplo: SQL> create or replace view emp_dept 2 as 3 select ename, dname, sum(sal) total_sal 4 from emp a, dept b 5 where a.deptno = b.deptno 6* group by ename, dname; View created. SQL> desc emp_dept Name Null? ------------------------------- -------ENAME DNAME TOTAL_SAL SQL> select * from emp_dept 2 order by ename; Type ---VARCHAR2(10) VARCHAR2(14) NUMBER

Structured Query Language - SQL*PLUS

93

ENAME ---------ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD

DNAME TOTAL_SAL -------------- --------RESEARCH 1100 SALES 1600 SALES 2850 ACCOUNTING 2450 RESEARCH 3000 SALES 950 RESEARCH 2975 ACCOUNTING 5000 SALES 1250 ACCOUNTING 1300 RESEARCH 3000 RESEARCH 800 SALES 1500 SALES 1250

14 rows selected. Drop View No havendo mais necessidade, uma viso pode ser removida da base. Sintaxe: DROP VIEW nome_view Exemplo: SQL> Drop view emp_dept; View dropped.

Structured Query Language - SQL*PLUS

94

Criando Seqncias Seqncia uma estrutura criada no Banco de Dados que retorna para cada acesso um nmero diferente. Ela pode ser utilizada para fornecer seqencialmente e sem repetio, valores a serem armazenados em cdigos que formam a chave primria de uma tabela. Create Sequence Sintaxe: CREATE SEQUENCE nome_da_sequencia [START WITH valor_inicial] [INCREMENT BY incremento] [MAXVALUE valor_maximo_sequencia | NOMAXVALUE] [MINVALUE valor_minimo_sequencia | NOMINVALUE] [CYCLE | NOCYCLE] CACHE nmero | NOCACHE] INCREMENT BY se no for especificado assume por default 1; CYCLE | NOCYCLE determina se a seqncia e cclica ou no. Se for cclica, quando atingir o valor mximo, voltara ao valor inicial; CACHE |NOCACHE determina se os valores da seqncia devem ser pralocados em memria ou no. Exemplo: SQL> create sequence seq_funcionario 2 start with 8000 3 increment by 1 4 maxvalue 999999 5 minvalue 000001 8 nocycle; Sequence created. Para recuperar o valor de uma seqncia: Valor corrente : CURRVAL Prximo valor : NEXTVAL

Exemplo: SQL> select seq_pedido.nextval 2* from dual; NEXTVAL --------8000

Structured Query Language - SQL*PLUS

95

SQL> select seq_pedido.currval 2* from dual; CURRVAL --------8000 Exemplo: SQL> Insert into emp values (seq_pedido.nextval, RITA DE CASSIA , ANALYST , 7939, sysdate, 3000,null, 10);

Exceto o valor inicial, todos os parmetros de uma seqncia podem ser alterados atravs do comando ALTER SEQUENCE. Exemplo: SQL> alter sequence seq_funcionario increment by 2;

Uma definio de seqncia e excluda atravs do comando DROP SEQUENCE. Sintaxe: Drop sequence nome_da_sequencia; Exemplo: SQL> Drop sequence seq_funcionario; Sequence dropped.

Structured Query Language - SQL*PLUS

96

ndices Quando se cria um ndice em uma tabela, o ORACLE monta uma estrutura que permite o encontro rpido das linhas a serem acessadas. Isto faz com que melhore a performance dos comandos de SQL, que tiverem na clausula WHERE, as colunas usadas na criao do ndice. O ndice pode ser nico ou no. Quando uma tabela e criada com constraints Primary key ou Unique j criado um ndice que identifica a chave primria. Create Index Sintaxe: CREATE [UNIQUE] INDEX nome_indice ON nome_tabela (coluna_1 [ASC/DESC][,coluna_2[ASC/DESC]]) Nota: UNIQUE especifica que a coluna ou conjunto de colunas que compem o ndice no podem ter valor duplicado na tabela. Exemplo: SQL> Create index ind_emp_mgr 2* on emp(mgr); Index created. SQL> Create index ind_pedido 2* on ord (ordid, custid); Index created. Drop Index A definio de um ndice no pode ser alterada. Se o ndice for criado errado ou no for mais necessrio, basta exclui-lo. Sintaxe: DROP INDEX nome_indice Exemplo: SQL> Drop table ind_emp_mgr; Index dropped.

Structured Query Language - SQL*PLUS

97

Lock Durante algumas operaes com tabelas e necessrio limitar, por determinado momento o acesso aquela tabela ou a seus dados. E possvel realizar o Lock de duas maneiras, atravs dos comandos Lock table ou do comando For Update Of no comando select. Sintaxe: LOCK TABLE nome_tabela1 [,nome_tabela2, ...] IN mode_lock MODE [NOWAIT] Locks a nvel de tabela: - EXCLUSIVE Garante que nenhum outro processo possa executar locks na tabelas ou alterar linhas da tabela; Outros processos podem apenas realizar consultas nas tabelas locadas; -SHARE Garante que nenhum outro processo possa executar lock exclusive nas tabelas; Outros processos podem apenas realizar consultas, locks compartilhados (SHARE) e compartilhados de linha (ROW SHARE); -SHARE ROW EXCLUSIVE Garante que nenhum outro processo realize lock na tabela inteira; Outros processos podem apenas realizar consultas, locks compartilhados de linha (ROW SHARE); Nota: Se no for possvel realizar o Lock no momento o comando NOWAIT libera o processo, seno aguarda at conseguir efetuar o lock; O lock e finalizado pelos comandos COMMIT ou ROLLBACK; Exemplo: Lock table dep in share mode;

Structured Query Language - SQL*PLUS

98

Exerccios - 15 1. Criar uma seqncia para facilitar entrada de dados na tabela de pedido: incrementar 1, iniciar com 1000, valor mnimo 000001, valor mximo 999999, no cclica

2. Incluir dois pedidos na tabela Ord usando a seqncia para incrementar o nmero do pedido ( ordid).

3. Criar uma viso que apresente, o codigo do cliente (custid), nome (name), o nmero do pedido (ordid) e total de cada pedido(total).

4. Criar um ndice para cliente por CEP (ZIP).

Structured Query Language - SQL*PLUS

99

Captulo 10 PERMISSES PARA USURIOS


A princpio um usurio s pode acessar objetos criados por ele. Mas com algumas permisses ou restries ele poder fazer outras intervenes na base de dados. GRANT O comando GRANT fornece privilgios necessrios para que o usurio possa acessar de diversas maneiras os objetos da base. Sintaxe: GRANT {privilgio_1[,privilgio_2] [ / ALL[PRIVILEGES]} ON nome_objeto TO [usurio_1[,usurio_2] / PUBLIC] [ WITH GRANT OPTION] ALL PRIVILEGES - fornece todos os privilgios possveis ao usurio para um determinado objeto. PUBLIC - o grant vale para todos os usurios cadastrados WITH GRANT OPTION - o usurio pode repassar seus privilgios para outros usurios que ele criar.

Privilgios mais comuns: ALTER - Pode alterar a estrutura dos objetos DELETE - Pode excluir linhas de tabelas ou views INDEX - Pode criar ndices INSERT - Pode criar linhas nas tabelas ou views REFERENCES - Pode criar uma tabela fazendo referencia a outra SELECT - Pode acessar valores das tabelas, view ou seqncias UPDATE - Pode alterar dados das tabelas ou views

Structured Query Language - SQL*PLUS

100

Exemplo1: Permitindo que o usurio curso1 possa acessar a tabela emp fazendo consultas, inseres , delees e alteraes em algumas coluna.

SQL> grant select, insert , delete, 2 update (ename, job, mgr, hiredate, sal, comm, deptno) 3* on emp to curso1; Grant succeeded Exemplo 2: Permitindo que o usurio curso2 possa acessar a tabela emp fazendo consultas, inseres, delees e alteraes e repassando este privilgio para seus subordinados. SQL> grant select, insert, delete, update 2* on emp to curso2; grant succeeded. REVOKE Para retirar um ou mais privilgios. Sintaxe: REVOKE {privilgio_1[, privilgio_2] / ALL { PRIVILEGES]} ON nome_objeto FROM { usurio_1[,usurio_2] / PUBLIC Exemplo 1: Retirando todos os privilgios do usurio Curso1 para tabela EMP SQL> Revoke all on emp from curso1; Revoke succeeded. Exemplo 2: Retirando privilgio de alterao da tabela emp para usurio Curso2 SQL> Revoke update on emp from Curso2; Revoke succeeded. Quando o privilgio de um usurio que tem a opo WITH GRANT OPTION retirado, automaticamente retirado o privilgio dos usurios que herdaram o privilgio dele.

Structured Query Language - SQL*PLUS

101

CONNECT possvel se conectar como outro usurio ORACLE sem encerrar a sesso corrente.

Sintaxe: CONN[ECT] [usurio/senha] Exemplo: SQL> Connect curso1/curso1 Para retornar: SQL> Connect curso/curso

DISCONNECT O comando Disconnet desfaz a conexo com o RDBMS, No encerra a sesso. Desta forma s permite uso de comandos SQL*PLUS. Sintaxe: DISC[ONNECT] Exemplo: SQL> disconnect Disconnected from Oracle7 Server Release 7.1.3.3.6 - Production Release With the distributed option PL/SQL Release 2.1.3.2.1 - Production +SQL>

Structured Query Language - SQL*PLUS

102

Captulo 11 MONTAGEM DE RELATRIOS A PARTIR DO SQL*PLUS possvel formatar o resultado de uma query, como os heading, totalizaes, ttulos e rodaps, atravs de comandos SQL*PLUS
SQL> select ename, job, comm, sal 2* from emp; ENAME --------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT ADAMS MILLER JOB COMM SAL --------- --------- --------PRESIDENT 5000 MANAGER 2850 MANAGER 2450 MANAGER 2975 SALESMAN 1400 1250 SALESMAN 300 1600 SALESMAN 0 1500 CLERK 950 SALESMAN 500 1250 ANALYST 3000 CLERK 800 ANALYST 3000 CLERK 1100 CLERK 1300

14 rows selected. Alterao de labels e formatao de resultados Sintaxe: COL[UMN] { nome_coluna / alias} [HEAD[ING] Nome Label ] [FOR[MAT] <formato>] [{PRI[NT] / NOPR[INT]}] [ JUS[TIFY] { L[EFT] / C[ENTER] / R[IGHT]}] Exemplo: SQL> column ename SQL> column job SQL> column comm SQL> column sal SQL> set feed off SQL> / heading nome heading cargo noprint heading salrio format a6

format 999,999,999.99

Structured Query Language - SQL*PLUS

103

nome -----KING KLAKE CLARK JONES ARTIN ALLEN TURNER JAMES WARD FORD .....

cargo salrio --------- ---------------PRESIDENT 5,000.00 MANAGER 2,850.00 MANAGER 2,450.00 MANAGER 2,975.00 SALESMAN 1,250.00 SALESMAN 1,600.00 SALESMAN 1,500.00 CLERK 950.00 SALESMAN 1,250.00 ANALYST 3,000.00

SQL> column sal heading 'Sal Mensal' nome -------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT ..... cargo -----------PRESIDENT MANAGER MANAGER MANAGER SALESMAN SALESMAN SALESMAN CLERK SALESMAN ANALYST CLERK ANALYST Sal Mensal --------------5,000.00 2,850.00 2,450.00 2,975.00 1,250.00 1,600.00 1,500.00 950.00 1,250.00 3,000.00 800.00 3,000.00

Para listar contedo das colunas: SQL> column column job ON heading 'cargo' column comm ON noprint column sal ON format 999,999,999.99 column ename ON heading 'nome' format a6

Structured Query Language - SQL*PLUS

104

Para reinicializar colunas: COLUMN nome_coluna CLEAR ou CLEAR COLUMNS Realizando quebras SQL> select job, ename, sal 2 from emp 3 order by job 4* / Sintaxe: BREAK ON coluna_break SKIP nmero [DUP/NODUP] SQL> break on job skip 1 nodup cargo nome salrio --------- ---------- -----------ANALYST FORD 3,000.00 SCOTT 3,000.00 CLERK JAMES SMITH MILLER ADAMS BLAKE CLARK JONES 950.00 800.00 1,300.00 1,100.00 2,850.00 2,450.00 2,975.00 5,000.00 1,250.00 1,600.00 1,250.00 1,500.00

MANAGER

PRESIDENT KING SALESMAN MARTIN ALLEN WARD TURNER

Para listar e reinicializar breaks: BREAK CLEAR BREAKS

Structured Query Language - SQL*PLUS

105

Totalizando as quebras Sintaxe: BREAK ON coluna_break COMPUTE <funo> OF coluna_1 coluna_2 coluna_n ON break_coluna Funes: SUM, MIN, MAX, AVG, STD, VAR, COUNT - retorna o nmero de linhas no nulas NUM - retorna o nmero de linhas (nulas inclusive) SQL> compute sum of sal on job SQL> / cargo nome --------- ---------ANALYST FORD SCOTT ********* sum CLERK JAMES SMITH MILLER ADAMS ********* sum MANAGER BLAKE CLARK JONES ********* sum PRESIDENT KING ********* sum SALESMAN MARTIN ALLEN WARD TURNER ********* sum salrio -----------3,000.00 3,000.00 -----------6,000.00 950.00 800.00 1,300.00 1,100.00 -----------4,150.00 2,850.00 2,450.00 2,975.00 -----------8,275.00 5,000.00 -----------5,000.00 1,250.00 1,600.00 1,250.00 1,500.00 -----------5,600.00

Structured Query Language - SQL*PLUS

106

Totalizando apenas no final do relatrio: Exemplo: SQL> break on report SQL> compute sum of sal on report cargo nome salrio --------- ---------- -----------ANALYST FORD 3,000.00 ANALYST SCOTT 3,000.00 CLERK JAMES 950.00 .... SALESMAN ALLEN 1,600.00 SALESMAN WARD 1,250.00 SALESMAN TURNER 1,500.00 --------------sum 29,025.00 Para listar e reinicializar computes: COMPUTE CLEAR COMPUTES

Colocando ttulos no relatrio Sintaxe: TTITLE posio titulo TTITLE ON/OFF A posio possveis: CENTER, RIGHT, LEFT Exemplo: SQL> ttitle center 'RELAO DE FUNCIONRIOS - CARGOS E SALRIOS' > skip 1 > center ============================================ skip 1 Fri Sep 06 RELAO DE FUNCIONRIOS - CARGOS E SALRIOS ============================================= page 1 SKIP nmero

Structured Query Language - SQL*PLUS

107

cargo Nome salrio --------- ---------- -----------ANALYST FORD 3,000.00 ANALYST SCOTT 3,000.00 CLERK JAMES 950.00 .... SALESMAN ALLEN 1,600.00 SALESMAN WARD 1,250.00 SALESMAN TURNER 1,500.00 --------------sum 29,025.00

Colocando rodaps no relatrio Sintaxe: BTITLE posio titulo BTITLE ON/OFF A posio possveis: CENTER, RIGHT, LEFT SQL> btitle center '------------------------ Confidencial ----------------------------' SQL> / Fri Sep 06 SKIP nmero

page 1

RELAO DE FUNCIONRIOS - CARGOS E SALRIOS ============================================= cargo nome salrio --------- ---------- --------------ANALYST FORD 3,000.00 ANALYST SCOTT 3,000.00 CLERK JAMES 950.00 CLERK SMITH 800.00 CLERK MILLER 1,300.00 ..... SALESMAN ALLEN 1,600.00 SALESMAN WARD 1,250.00 SALESMAN TURNER 1,500.00 --------------sum 29,025.00 -------------Confidencial -------------------

Structured Query Language - SQL*PLUS

108

Armazenado e Imprimindo resultados O comando SPOOL usado para mover todo display de tela para um arquivo. Ou seja, depois que o comando Spool estiver ativado toda entrada via teclado ser registrada e armazenada num arquivo. Para obter um melhor resultado as variveis do SQL*PLUS e o comando SQL devem estar montados previamente. O arquivo gerado ter extenso .lst , se no lhe for atribuda outra. Geralmente preparado um arquivo chamado FLAT FILE e simplesmente executado sempre que necessrio. Desta forma teremos: SQL> ed relat.sql column ename heading nome format a6 column job heading cargo column comm noprint column sal heading salrio format 999,999,999.99 -set feed off set pages 22 -break on job skip 1 nodup compute sum of sal on job -ttitle center 'RELAO DE FUNCIONRIOS - CARGOS E SALRIOS' Skip 1 center ============================================ skip 2 -btitle center '------------------------ Confidencial ----------------------------' -- Listar todos os funcionrios e salrios ordenados por Cargo select job, ename, comm, sal from emp order by job / Para ligar o spool SQL> spool <arquivo> Para desligar o spool SQL> Spool off Para fechar e enviar para impressora SQL> Spool out SQL> Spool relatorio SQL> @relat SQL> Spool off

Structured Query Language - SQL*PLUS

109

CAPTULO 12 PASSAGEM DE PARMETROS PARA EXECUO DO SELECT permitido o uso de parmetros para execuao de qualquer comando SQL. Atravs da varivel de sistema DEF[INE] se especifica qual o caracter que identifica o parmetro. Quando o SQL executa o comando e encontra o caracter definido , ele solicita as usurio um valor para substituir pelo parmetro. Sintaxe: <Comando_sql> WHERE COLUNA <operador> &PARAMETRO Exemplo: Selecionar nome, salrio dos funcionarios sob gerencia escolhida. SQL> show define define "&" (hex 26) SQL> select ename "Nome", sal "Salrio" 2 from emp where mgr = &gerente; Enter value for gerente: 7839 old new 2: where mgr = &Gerente 2: where mgr = 7839

Nome Salrio ---------- --------BLAKE 2850 CLARK 2450 JONES 2975 Exemplo 2: Selecionar nome, salrio dos funcionarios sob cargo escolhido SQL> select ename "Nome", sal "Salrio" 2 from emp 3* where job = upper('&cargo'); Enter value for cargo: salesman old new 2: where job = upper('&cargo') 2: where job = upper('salesman')

Nome Salrio ---------- --------MARTIN 1250

Structured Query Language - SQL*PLUS

110

ALLEN TURNER WARD

1600 1500 1250.

Para executar novamente o comando passando outro parmetro basta usar / ; SQL> / Enter value for cargo: Manager old new 2: where job = upper('&cargo') 2: where job = upper('Manager')

Nome Salrio ---------- --------BLAKE 2850 CLARK 2450 JONES 2975 Quando o SQL*PLUS encontra o caracter & ,ele verifica se a varivel a ser substituda j est criada. Se no estiver , solicita um valor para a mesma. O comando DEF[INE] serve para criar uma varivel e para verificar se ela j existe ou no. Sintaxe: DEF[INE] variavel [ = valor] Exemplo: SQL> Define cargo symbol cargo is UNDEFINED SQL> define cargo = CLERK SQL> define cargo DEFINE CARGO = "CLERK" (CHAR)

SQL> select ename "Nome", sal "Salrio" from emp 2* where job = upper('&cargo'); old new 2: where job = upper('&cargo') 2: where job = upper('CLERK')

Nome Salrio ---------- ---------

Structured Query Language - SQL*PLUS

111

JAMES SMITH ADAMS MILLER

950 800 1100 1300

o comando && determina que se a varivel no existir, ela deve ser criada. SQL> select ename "Nome", sal "Salrio" from emp 2* where sal < &&salario; Enter value for salario: 1500 old new 2: where sal < &&salario 2: where sal < 1500

Nome Salrio ---------- --------MARTIN 1250 JAMES 950 WARD 1250 SMITH 800 ADAMS 1100 MILLER 1300 6 rows selected. SQL> / old new 2: where sal < &&salario 2: where sal < 1500

Nome Salrio ---------- --------MARTIN 1250 JAMES 950 WARD 1250 SMITH 800 ADAMS 1100 MILLER 1300 6 rows selected. ACCEPT O comando ACC[EPT] solicita um valor para uma varivel, mesmo que ela j esteja definida.

Structured Query Language - SQL*PLUS

112

Sintaxe: ACC[EPT] variavel [NUM[BER] / CHAR [PROMPT text] NOPR[OMPT]] [HIDE] Onde: PROMPT texto - deve apresentar o texto para solicitao de entrada; NOPROMPT - no apresenta o texto; HIDE - o valor preenchido no aparece na digito (senhas).

Exemplo: SQL> accept salario prompt 'Informe o salrio base: ' Informe o salrio base: 1000 SQL> select ename "Nome", sal "Salrio" from emp 2* where sal < &&salario; old new 2: where sal < &&salario 2: where sal < 1000

Nome Salrio ---------- --------JAMES 950 SMITH 800 O Comando VERIFY suprime a apresentao da substituicao. SQL> set verify off SQL> SQL> accept salario prompt 'Informe o salrio base: ' Informe o salrio base: 1000 SQL> select ename "Nome", sal "Salrio" from emp 2* where sal < &&salario; Nome Salrio ---------- --------JAMES 950 SMITH 800

Structured Query Language - SQL*PLUS

113

Vous aimerez peut-être aussi