113
Structured Query Language - SQL*PLUS 1 SQL*PLUS Conceito O SQL*PLUS é um ambiente de trabalho que permite ao usuário 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 cálculos, armazenar e imprimir resultados de uma consulta; - Criar, alterar, remover e listar objetos, como: tabelas, índices, seqüências, sinônimos e views; - Atribuir valores para execução de comandos SQL; - Escolher um ambiente próprio de trabalho para edição de comandos; Características do SQL: - É uma linguagem não Procedural, que executa linhas de comandos; - Permite Incluir, consultar, alterar ou remover dados da base; - Garante consistência e a integridade de dados; - Permite dar e retirar permissões de acesso a usuários; - Acesso e copia entre Bancos de dados diferentes; - Pode ser usada por: . Administradores de sistema; . Administradores de Banco de Dados; . Administradores de Segurança em Banco; . Gerentes; . Programadores em diversas ferramentas; . Pessoal de Suporte; . Usuários 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 ;

Apostila SQL Plus

  • Upload
    kmikzbr

  • View
    309

  • Download
    7

Embed Size (px)

Citation preview

Page 1: Apostila SQL Plus

Structured Query Language - SQL*PLUS 1

SQL*PLUS

Conceito

O SQL*PLUS é um ambiente de trabalho que permite ao usuário 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 cálculos, armazenar e imprimir resultados de uma consulta; - Criar, alterar, remover e listar objetos, como: tabelas, índices, seqüências, sinônimos e views; - Atribuir valores para execução de comandos SQL; - Escolher um ambiente próprio de trabalho para edição de comandos;

Características do SQL:

- É uma linguagem não Procedural, que executa linhas de comandos; - Permite Incluir, consultar, alterar ou remover dados da base; - Garante consistência e a integridade de dados; - Permite dar e retirar permissões de acesso a usuários; - Acesso e copia entre Bancos de dados diferentes;

- Pode ser usada por: . Administradores de sistema; . Administradores de Banco de Dados; . Administradores de Segurança em Banco; . Gerentes; . Programadores em diversas ferramentas; . Pessoal de Suporte; . Usuários 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 ;

Page 2: Apostila SQL Plus

Structured Query Language - SQL*PLUS 2

Capítulo 1 ACESSANDO O SQL*PLUS

Para que o usuário possa se conectar com o produto SQL*PLUS, è necessário

que esteja previamente cadastrado como usuário ORACLE.

Quando o ORACLE é instalado, e criado automaticamente um usuário chamado SCOTT com a senha TIGER, este usuário acessa várias tabelas e estruturas próprias deste usuário.

Sintaxe de comando ambiente Character mode:

SQLPLUS[usuário]/[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 Gráfico:

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 conteúdo do diretório sem deslogar do SQL*PLUS:

SQL> Host

ou para executar o comando dentro do SQL*PLUS

SQL> Host <comando do Sistema Operacional>

Page 3: Apostila SQL Plus

Structured Query Language - SQL*PLUS 3

Edição de comandos SQL no SQL*PLUS

O SQL*PLUS possui um editor de comandos próprio 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 usuário entre com um novo comando SQL.

Exemplo:

SQL> create table cadastro 2 (Codigo number(2) not null, 3 Nome varchar2(20) not null, 4 dt_nascimento date,

5 id_sexo char, 6 Observação long

List

O conteúdo do buffer ou parte do mesmo, pode ser exibido através do comando:

Sintaxe: L[ist] [número 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 create table cadastro

2 (Codigo number(2) not null, 3 Nome varchar2(20) not null, 4 dt_nascimento date,

5 id_sexo char, 6* Observação long

Exemplo2: Listando o conteúdo 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,

Page 4: Apostila SQL Plus

Structured Query Language - SQL*PLUS 4

Exemplo 3: listando apenas a linha 2 e tornando-a corrente

SQL> L 2 2* (Codigo number(2) not null,

Input

Pode-se incluir uma ou mais linhas no buffer a partir da linha corrente ,ou no meio do texto, forçando 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 varchar2(20) not null,

SQL> i 4* data_inclusao date,

ou SQL> i data_inclusao date,

SQL> List 1 create table cadastro

2 (Codigo number(2) not null, 3 Nome varchar2(20) not null,

4 Data_inclusao date. 5 dt_nascimento date,

6 id_sexo char, 7* Observação long)

Change

Sintaxe:

C[HANGE]/texto antigo/[texto novo]

O conteúdo de qualquer linha do buffer pode ser alterado todo ou parcialmente através do comando CHANGE.

Exemplo:

SQL> L 4 4* data_inclusao date, SQL> c/data_inclusao/dt_inclusao

Page 5: Apostila SQL Plus

Structured Query Language - SQL*PLUS 5

SQL> List 1 create table cadastro

2 (Codigo number(2) not null, 3 Nome varchar2(20) not null,

4 dt_inclusao date. 5 dt_nascimento date,

6 id_sexo char, 7* Observação long)

Nota: No local da / pode-se usar outros caracteres. Preferencialmente usar caracteres não 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 create table cadastro 2 (Codigo number(2) not null, 3 Nome varchar2(20) not null, 4 dt_nascimento date, 5 id_sexo char, 6* Observação long

Nota: Não é possível excluir várias 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]

Page 6: Apostila SQL Plus

Structured Query Language - SQL*PLUS 6

Exemplo:

SQL> 6 6* observação 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* Observação long)

- É possível ativar um editor de texto no SQL*PLUS utilizando o comando EDIT. O editor a ser chamado será o que estiver definido na variável _EDITOR. Caso esta não esteja definida, será utilizado o editor default do sistema operacional no qual o usuário estiver trabalhando.

Define

Usado para definir variáveis atribuindo-lhes valores

Sintaxe:

DEF[INE] [variável [=valor]]

Obs: Quando nenhuma variável è informada, o SQL*PLUS exibe o valor de todas as variáveis que estão definidas. Exemplo 1: Verificando o conteúdo da variável _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 [extensão]

O editor é ativado e, após a saída do mesmo, o controle é novamente transferido para o SQL*PLUS.

SQL> Edit arquivo.sql

Page 7: Apostila SQL Plus

Structured Query Language - SQL*PLUS 7

Quando nenhum arquivo é especificado, o SQL*PLUS criará no diretório

corrente um arquivo chamado AFIEDT.BUF que conterá o comando do buffer. O editor será então ativado, carregando para a memória este arquivo; todas as alterações realizadas através do editor serão automaticamente transferidas para o buffer, quando da saída do mesmo.

Exemplo: Se existir algo no buffer:

SQL> edit Wrote file afiedt.buf

Executando o conteúdo do Buffer:

O conteúdo de SQL editado no buffer, pode ser executada de três maneiras diferentes: ; , / e run , especificadas a seguir:

SQL Terminator

A variável de sistema SQLT[erminator], define o caracter que representa para o SQL*PLUS fim do comando de SQL e execução 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 number(2) not null, 3 Nome varchar2(20) not null, 4 dt_nascimento date, 5 id_sexo char, 6* Observação long);

Table created

Barra (/):

A barra / , quando digitada na primeira coluna da linha em branco do buffer, determinada a execução do comando SQL; se for digitada diretamente no prompt, significa que o comando de SQL, contido no buffer, deve ser executado sem a exibição do mesmo.

Page 8: Apostila SQL Plus

Structured Query Language - SQL*PLUS 8

Exemplo 1:

SQL> create table cadastro 2 (Codigo number(2) not null, 3 Nome varchar2(20) not null, 4 dt_nascimento date,

5 id_sexo char, 6 Observação long)

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 exibição do mesmo.

Exemplo: Executando arquivo do buffer:

SQL> Run 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* Observação long)

Table created

Buffer x arquivo

O buffer é uma área de memória capaz de armazenar temporariamente, um comando SQL; quando a conexão com o SQL*PLUS é encerrada, o comando é abandonado. Da mesma forma, quando outro comando é digitado, o anterior passa a não existir; se for necessário executar o comando outras vezes, tal comando deve ser gravado em um arquivo através do comando SAVE.

OBS: A variável de sistema SUF[FIX] define a extensão que deve ser assumida nas transações, entre o SQL*PLUS e o sistema operacional, quando a extensão for omitida; normalmente esta extensão é .sql .

Page 9: Apostila SQL Plus

Structured Query Language - SQL*PLUS 9

Save

Para salvar um comando SQL em um arquivo, armazenando-o no diretório especificado, ou no diretório corrente.

Sintaxe:

SAV[E] [[caminho] nome_arquivo [.extensão] [REPLACE]

Exemplo 1: Salvando arquivo no diretório 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 [.extensão]

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 [.extensão] ou @ [[caminho] nome_arquivo [.extensão]

Exemplo 1: Executando o arquivo diretamente

SQL> @arquivo

Clear buffer

Limpa conteudo do SQL buffer

Page 10: Apostila SQL Plus

Structured Query Language - SQL*PLUS 10

SQL> clear buffer

Colocando comentários nos comandos SQL

Usando REM[ARK]

Usa-se no início da linha acompanhado do comentário

Exemplo:

REM Relacao de Funcionários REM para pagamento de Salários 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 Salários */

/* */ 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 Salários

-- Select empno, ename, job, comm, sal

from emp -- verificando na tabela EMP order by deptno

/

Page 11: Apostila SQL Plus

Structured Query Language - SQL*PLUS 11

Capítulo 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 aplicável);

- Pode-se informar restrições para cada coluna ou p/ um conjunto de colunas;

Criando a estrutura de uma tabela.

- O nome da tabela pode ser composto por letras, números e underscore, porém deve sempre começar com caracter alfabético; - Máximo 30 caracteres; - Não pode ser palavra reservada; - O nome do objeto deve ser único; - Deve ter no mínimo uma coluna;

Sintaxe:

CREATE TABLE usuário.nome_tabela (nome_coluna tipo_dado [tamanho}

[restrições], (nome_coluna tipo_dado [tamanho]

[restrições], [restrições]) TABLESPACE nome_tablespace PCTFREE número PCTUSED número

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.

Page 12: Apostila SQL Plus

Structured Query Language - SQL*PLUS 12

Tipos de dados

Informar um tipo de dado para uma coluna significa que a coluna só aceita

valores compatíveis com este tipo de dado.

CHAR

Colunas que armazenam valores alfanuméricos com tamanho fixo (máximo de 255 bytes): caso o tamanho não seja informado, o ORACLE assume que o tamanho 1.

Nota: Na inserção de um valor temos:

* Se o valor for menor que o tamanho definido, são 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 alfanuméricos com tamanho variável (máximo de 2000 bytes), o tamanho deve ser informado.

Exemplo:

SQL> create table cadastro<n> 2 (.... 3 Nome varchar2(20),

4 .......);

VARCHAR

Usado nas versões anteriores, a ORACLE não recomenda seu uso.

LONG [VARCHAR]

Colunas que armazenam valores alfanuméricos com tamanho variável (máximo de 2G bytes); o tamanho não deve ser informado.

Page 13: Apostila SQL Plus

Structured Query Language - SQL*PLUS 13

Exemplo:

SQL> create table cadastro 2 (...... 3 Observação Long varchar ou

Observação Long, 4 ....);

RAW

Colunas que armazenam valores binários com tamanho variável máximo de 255 bytes). O tamanho tem que ser informado (este tipo é mais usado para armazenar seqüências de caracteres gráficos).

LONG RAW

Colunas que armazenam valores binários com tamanho variável (máximo de 2G bytes); o tamanho não deve ser informado (este tipo é mais usado para armazenar seqüências de caracteres gráficos).

Nota: Para os tipos LONG e LONG RAW:

- Somente é permitido um campo por tabela; - Não podem fazer parte de cláusulas

WHERE, GROUP BY, ORDER BY, CONNECT BY ou DISTINCT, Não podem ser usados em expressões (SUBSTR, INSTR, etc);

- Não podem ser indexes; - Não podem aparecer em expressões ou condições - Não podem ser passados como argumentos para procedures ou funções;

NUMBER

Colunas que armazenam valores numéricos, positivos ou negativos, com no máximo de 38 dígitos; caso o tamanho não seja informado, o ORACLE assumirá que o tamanho máximo é 38 com o ponto decimal flutuante. O tamanho de uma coluna numérica pode ser definido com precisão e escala .

Exemplos:

Especificação Dados Valor Armazenado number 7456123.89 7456123.89 number(9) 7456123.89 7456124 number(9,2) 7456123.89 7456123.89 number(9,1) 7456123.89 7456123.9 number(6) 7456123.8 Erro number(15,1) 7456123.8 7456123.8 number(7,2) 7456123.89 Erro number(7,-2) 7456123.89 7456100 number(4,5) .01234 .01234

Page 14: Apostila SQL Plus

Structured Query Language - SQL*PLUS 14

number(4,5) .00012 .00012 number(4,5) .000127 .00013 number(2,7) .0000012 .0000012 number(2,7) .00000123 .0000012

código number (2) not null, salário 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 século; não 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 definição de sua estrutura através do comando DESCRIBE

DESCRIBE

Sintaxe:

DESC[RIBE] nome_tabela

Exemplo:

SQL> desc emp

Page 15: Apostila SQL Plus

Structured Query Language - SQL*PLUS 15

Exercícios - 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,

observação long

2. Efetuar as seguintes alterações:

- 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 date e nm_usuário varchar2(20)

- Excluir a coluna observação ;

- Acrescentar ) ao final da ultima coluna.

3. Executar o conteúdo 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 criação da tabela salgrade.

- Verificar a descrição da tabela salgrade criada.

Page 16: Apostila SQL Plus

Structured Query Language - SQL*PLUS 16

Capítulo 3

INTEGRIDADE DE DADOS E REFERENCIAL

Restrições / Constraints

Restrições são regras básicas, informadas ao RDBMS, para o controle do preenchimento de uma ou mais colunas da tabela. Podem ser especificadas na definição da coluna (column constraint) ou no final do comando de criação da tabela (table constraint).

Estas restrições forçam a consistência e integridade referencial do Banco de Dados; toda restrição criada possui um nome que pode ser atribuído pelo usuário através da opção CONSTRAINT. Caso isto não ocorra, o ORACLE se encarregará de escolher um nome de acordo com critérios próprios (a vantagem dessa atribuição ser realizada pelo usuário é a facilidade de uma exclusão futura).

O uso de restrições eliminam erros de programação, além de sua funcionalidade ser controlada pelo ORACLE. Estas restrições são armazenadas no dicionário de dados; por isso os dados inseridos através de qualquer aplicação se ajustam as constraints definidas.

Caso alguma restrição seja violada, imediatamente são retornadas mensagens de erro que podem ser tratadas pelas aplicações.

Exemplo 1: Column Constraint

SQL> Create table Emp (empno number(4) constraint pk_emp primary key, ename varchar2(20) constraint uk_emp unique, job varchar2(10), mrg number constraint fk_mgr

references emp, hiredate date default sysdate, sal number(12,2) constraint ck_sal check (sal > 500), comm number(5,2), deptno number(2) constraint fk_deptno

references dept);

Page 17: Apostila SQL Plus

Structured Query Language - SQL*PLUS 17

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 é obrigatório, só pode ser declarado junto com a coluna. Caso não seja informada, será assumida a opção NULL.

Exemplo:

SQL> Create table Emp (....., ename varchar2(20) not null, .....);

Primary Key

Define que uma ou mais colunas compõem a chave primária da tabela. São 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),

....);

Page 18: Apostila SQL Plus

Structured Query Language - SQL*PLUS 18

Unique

Define que uma ou mais colunas não podem ter valores repetidos em diferentes linhas da tabela.

Exemplo:

SQL> Create table Emp (..., ename varchar2(20) constraint uk_emp unique, ...);

References

Define que uma coluna

é a chave primária 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 referência garante que para cadastrar um empregado, o código do departamento tem que estar cadastrado na tabela Dept.

- Omitindo a definição 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 correspondência com a chave primária da outra tabela.

Exemplo:

SQL> Create table Emp ( ..., deptno constraint fk_emp_dept references dept);

On delete cascade

- Garante a deleção dos filhos quando o pai e deletado através da integridade referencial.

Page 19: Apostila SQL Plus

Structured Query Language - SQL*PLUS 19

Foreign Key

Define que uma ou mais colunas

compõem a chave primária ou são ú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 domínio de valores permitidos para uma coluna.

Exemplo 1:

SQL> Create table Emp (....., sal number(12,2) constraint ck_sal check (sal > 500), .....);

Exemplo 2:

SQL> Create table Cadastro (....., id_sexo varchar2(1) constraint ck_sexo

check (id_sexo in ( M , F )), .....);

Page 20: Apostila SQL Plus

Structured Query Language - SQL*PLUS 20

Exercícios - 02

1. Criar as seguintes tabelas e suas constraints:

Cliente --------- cd_cliente n(6) chave primária nm_cliente c(45) chave única ie_sexo c(1) somente aceitar F ou M

endereço c(45) obrigatório cidade c(20) estado c(2) CEP n(9) DDD n(4) fone n(9) cd_representante n(4) obrigatório vl_limite_credito n(10,2) observação long

Produto ---------- cd_produto n(6) chave primária ds_produto c(50) chave única

Pedido --------- nr_pedido n(4) chave primária dt_pedido data obrigatória

ie_comissao c(1) deve aceitar S ou N

cd_cliente chave estrangeira na tabela cliente dt_envio data vl_total n(12,2) deve ser maior ou igual a zero

Item_Pedido ----------------- nr_pedido n(4) chave estrangeira na tabela pedido nr_item n(4) cd_produto n(6) chave estrangeira na tabela produto vl_unitario n(9,2) obrigatório quantidade n(8) obrigatório vl_total_item n(9,2)

obs.: Chave primária composta por: nr_pedido e nr_item

2. Verificar a estrutura das tabelas criadas.

Page 21: Apostila SQL Plus

Structured Query Language - SQL*PLUS 21

Manutenção da Estrutura de Tabelas e Controle de Transações

Alterando a Estrutura de uma Tabela:

Depois de criada a estrutura de uma tabela, é possível acrescentar colunas, acrescentar ou excluir restrições, modificar características de colunas.

ALTER TABLE

Sintaxe:

ALTER TABLE nome_tabela ADD ( nome_coluna tipo_dado [tamanho] [restrição],

nome_coluna tipo_dado [tamanho] [restrição]) MODIFY ( nome_coluna tipo_dado [tamanho],

nome_coluna tipo_dado [tamanho]) DROP CONSTRAINT nome_restrição

- A opção ADD é utilizada para acrescentar definições de colunas ou restrições.

- A opção MODIFY é utilizada para alterar as definições da coluna ( tamanho e/ou tipo de dado, ou acrescentar a restrição de nulo ou não nulo).

- A opção DROP CONSTRAINT é utilizada para excluir restrições de colunas ou da tabela.

Nota: - Não é possível alterar uma coluna contendo nulos para uma constraint NOT NULL; também não é possível diminuir o tamanho da coluna ou alterar o tipo de dado, a menos que esta não contenha dados.

- Para alterar uma restrição, esta deve ser eliminada e então pode-se adicionar as alterações desejadas, como uma nova restrição.

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

Page 22: Apostila SQL Plus

Structured Query Language - SQL*PLUS 22

Exemplo 3: Dropando uma constraint na tabela Emp

SQL> Alter table Emp drop constraint ck_sexo;

Nota: A definição da constraint fica na tabela USER_CONSTRAINTS e as colunas descritas na constraint ficam na tabela USER_CONS_COLUMNS.

SQL> desc user_constraints;

Page 23: Apostila SQL Plus

Structured Query Language - SQL*PLUS 23

Exercícios - 03

1. Incluir na tabela grade_salarial a coluna:

Observação long.

2. Incluir na tabela departamento :

chave primária usando a coluna deptno; chave única usando o nome; dt_cadastro com data do sistema.

3. Retirar a unicidade da tabela produto para descrição.

4. Incluir na tabela produto as colunas:

dt_atualizacao date deve ter como default a data do sistema nm_usuário c(20)

Page 24: Apostila SQL Plus

Structured Query Language - SQL*PLUS 24

Capítulo 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 obrigatórias.

SQL> Insert into Emp (empno, deptno) values (2121, 20);

- Não declarando as colunas:

SQL> Insert into Emp values (2121, Roberto , Analista ,7566, 12-feb-96 , 3000,null,20);

Nota: Quando não são informadas as colunas da tabela, deve-se informar valores para toda a tabela, inclusive as colunas que admitem valores nulos.

Page 25: Apostila SQL Plus

Structured Query Language - SQL*PLUS 25

Concluindo Transações com o Banco de Dados

Transação é uma unidade lógica de trabalho composta por comandos de SQL que serão tratados pelo RDBMS.

Uma transação começa com o primeiro comando SQL executado depois da conexão com o SQL*PLUS, ou do encerramento da transação anterior; e pode ser finalizada de várias formas.

Nenhum dos comandos de SQL que realizam alterações no dicionário 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 também encerram uma transação.

Os comandos de SQL que realizam operações com linhas de tabela, podem ser desfeitos com o comando ROLLBACK ou confirmados com o COMMIT, finalizando desta forma a transação que estava pendente. Enquanto a transação não for concluída, as alterações só serão válidas para a sessão corrente, ou seja, outros usuários não terão acesso aos dados dessas alterações.

Os comandos de SQL DDL ao encerrarem uma transação, tornam verdadeiras, para todos os usuários, as atualizações feitas no banco de dados.

Savepoint

Um processo completo pode ser dividido em várias partes com o comando SAVEPOINT. A finalidade desta divisão é a opção de desfazer somente uma parte do processo e não todo ele.

sintaxe:

SAVEPOINT nome_ponto

Por default, o número máximo de pontos ativos numa transação é 5, mas pode ser alterado para até 255, conforme parametrização 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;

Page 26: Apostila SQL Plus

Structured Query Language - SQL*PLUS 26

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 transações não efetivadas serão desfeitas, ou também pode-se informar a partir de qual ponto podem ser desfeitas as transações.

Exemplo 1: Desfazendo a segunda inclusão

SQL> rollback to Savepoint Primeiro_ponto;

Rollback complete

Exemplo 2: Desfazendo toda a transação

SQL> Rollback;

Rollback complete

COMMIT

sintaxe:

COMMIT

Efetiva todas as transações pendentes.

Exemplo 1: Confirmando transação

SQL> Rollback to Savepoint Primeiro_ponto;

Rollback complete

SQL> Commit;

Commit complete

Page 27: Apostila SQL Plus

Structured Query Language - SQL*PLUS 27

Nota: Pode-se estabelecer para uma sessão, ou parte da mesma, que ao final da execução de cada comando de SQL DML, será realizado um COMMIT AUTOMÁTICO. Desta forma, cada transação será composta de um e somente um comando, e não poderá ser desfeita. Para realizar tal procedimento, basta atribuir ON ou IMM[EDIATE] à variável de sistema AUTO[COMMIT].

Exemplo:

SQL> set autocommit on;

Page 28: Apostila SQL Plus

Structured Query Language - SQL*PLUS 28

Exercícios - 04

1. Incluir na tabela PRODUTO os seguintes registros:

Codigo Descrição --------- ------------------- 1 Clipes pequeno 2 Clipes Médio 3 Clipes Grande 4 Caneta Azul

dt_atualizacao = SYSDATE nm_usuário = USER

2. Incluir na tabela GRADE_SALARIAL os seguintes registros:

Grade minsal maxsal -------- ------------ ---------- 1 1 500 2 501 1000 3 1001 2000 4 2001 3000 5 3001 9999

observação = Null

3. Confirmar no banco de dados as inclusões realizadas.

4. Executar o arquivo DEMOBLD7.SQL que está no diretório corrente.

Page 29: Apostila SQL Plus

Structured Query Language - SQL*PLUS 29

Capítulo 5

RECUPERAÇÃO DE DADOS

Em uma tabela é possível selecionar todas as colunas, somente algumas

colunas, um texto fixo, colunas concatenadas entre si, colunas concatenadas com um texto fixo, colunas formatadas, etc.

Podemos também, eliminar na exibição, as tuplas do resultado que forem repetidas.

A ordem em que as colunas foram criadas não importa, pois o comando SELECT permite várias combinações para a seleção.

Sintaxe:

SELECT [ALL/DISTINCT] { [*] [ [tabela.]nome_coluna1 [alias1] ,

[tabela.]nome_coluna2 [alias2] [,função(nome_coluna3) [alias3] ]

[, texto ]} FROM [usuário.]nome_tabela1 [alias_tabela1],

[usuário.]nome_tabela2 [alias_tabela2] [WHERE <condições>] [GROUP BY <expressão>] [HAVING <condição>] [ORDER BY nome_coluna / posicao_coluna [ASC/DESC]] ;

Nota: A opção ALL define que deverão ser exibidas todas as tuplas selecionadas, mesmo que elas aparecem mais de uma vez.

- A opção DISTINCT especifica que para cada grupo de tuplas repetidas, só será exibido um elemento.

- O asterisco (*) indica que deverão ser exibidas todas as colunas, nos seus formatos originais e na ordem de criação da tabela.

Page 30: Apostila SQL Plus

Structured Query Language - SQL*PLUS 30

Exemplo 1: Retornando todas as Colunas

SQL> select * from emp;

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

14 rows selected.

Exemplo 2: Aplicando uma função de grupo

SQL> select sum(sal) from emp;

SUM(SAL) ------------ 29025

Exemplo 3: Com expressões aritméticas ( +, -, *, / )

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;

Page 31: Apostila SQL Plus

Structured Query Language - SQL*PLUS 31

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 FUNCIONÁRIO from emp;

FUNCIONÁRIO --------------------------- 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

Page 32: Apostila SQL Plus

Structured Query Language - SQL*PLUS 32

Nota: O alias ou apelido deve ser usado para colocar TÍTULOS sobre as colunas, estes apelidos podem ter uma ou mais palavras, quando for composto pode-se usar underscore ( _ ), ou faze-lo com espaços em branco colocando o apelido neste caso entre aspas duplas (

)

Exemplos:

SQL> select empno || - || ename FUNCIONÁRIO, TRABALHA NO DEPARTAMENTO , deptno NÚMERO from emp;

SQL> select empno || - || ename Código e Nome

from emp;

Código 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.

Page 33: Apostila SQL Plus

Structured Query Language - SQL*PLUS 33

Variáveis de Ambiente SQL*PLUS

O ambiente do SQL*PLUS pode ser formatado para revelar um ambiente particular, de acordo com as necessidades do usuário. O ambiente do SQL*PLUS possui um formato default, mas que pode ser alterado através de variáveis de sistema.

Feedback

Toda vez que um comando SQL é executado, o RDBMS retorna uma mensagem de acordo com o tipo de operação 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 à variável 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] número_de_espacos

Page 34: Apostila SQL Plus

Structured Query Language - SQL*PLUS 34

Exemplo: Colocando o space com 10 (dez)

SQL> set space 10 SQL> select 'Funcionario: , empno from emp;

'FUNCIONARIO EMPNO --------------------- -------- Funcionario: 7839 Funcionario: 7698 Funcionario: 7782 Funcionario: 7566 Funcionario: 7654 Funcionario: 7499 Funcionario: 7844 ....

Linesize

Determina o número máximo de caracteres que o SQL*PLUS exibirá por linha.

Sintaxe:

SET LIN[ESIZE] número_de_colunas

Exemplo: Com tamanho de linha 35

SQL> set linesize 35 SQL> select empno, ename, job, deptno from emp;

EMPNO ENAME JOB ---------- ---------- --------- DEPTNO --------- 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10

....

Wrap

Se o total de caracteres a serem exibidos for maior que o número máximo especificado na variável de sistema Linesize, o SQL*PLUS passará a(s) coluna(s) que não couberem na linha para a linha de baixo (WRAP=ON), caso contrário o restante da linha será truncado (WRAP=OFF)

Page 35: Apostila SQL Plus

Structured Query Language - SQL*PLUS 35

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 ENAME JOB --------- ------------- --------- 7839 KING PRESIDENT 7698 BLAKE MANAGER 7782 CLARK MANAGER 7566 JONES MANAGER 7654 MARTIN SALESMAN 7499 ALLEN SALESMAN 7844 TURNER SALESMAN

....

Pagesize

Determina o número máximo de linhas que o SQL*PLUS exibirá por página. Para realizar este cálculo, deve-se levar em consideração a linha do título da coluna, a sublinha, o total de tuplas e mais uma linha em branco.

Sintaxe:

SET PAGES[IZE] número_de_linhas

Exemplo 1 : Especificando no máximo de 6 linhas por página

SQL> set pagesize 6 SQL> select empno, ename, job , deptno

from emp;

EMPNO ENAME JOB DEPTNO --------- ---------- --------- --------- 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10

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

Page 36: Apostila SQL Plus

Structured Query Language - SQL*PLUS 36

7566 JONES MANAGER 20 7654 MARTIN SALESMAN 30 7499 ALLEN SALESMAN 30

EMPNO ENAME JOB DEPTNO --------- ---------- --------- --------- 7844 TURNER SALESMAN 30 7900 JAMES CLERK 30 7521 WARD SALESMAN 30

EMPNO ENAME JOB DEPTNO --------- ---------- --------- --------- 7902 FORD ANALYST 20 7369 SMITH CLERK 20 7788 SCOTT ANALYST 20

....

Pause

É possível fazer com que o SQL*PLUS pare de exibir os dados selecionados toda vez que ocorrer quebra de página, aguardando que o usuário pressione <ENTER> , para exibir a próxima página.

Sintaxe:

SET PAU[SE] ON / OFF

Exemplo:

SQL> Set pause on

Heading

Toda coluna selecionada, carrega um título de identificação, caso seja necessário a omissão do mesmo, basta atribuir OFF à variável de sistema HEADING.

Sintaxe:

SET HEA[DING] ON / OFF

Exemplo: Omitindo o cabeçalho.

SQL> set heading off SQL> select empno, ename, job, deptno

from emp;

Page 37: Apostila SQL Plus

Structured Query Language - SQL*PLUS 37

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 7654 MARTIN SALESMAN 30 7499 ALLEN SALESMAN 30 7844 TURNER SALESMAN 30 ....

Underline

O título de identificação da coluna pode ser sublinhado ou não. A sublinha pode ser formada por qualquer caracter que não seja alfanumérico, nem espaço 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 ENAME JOB DEPTNO ========= ========== ========= ========

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 7654 MARTIN SALESMAN 30 7499 ALLEN SALESMAN 30 7844 TURNER SALESMAN 30 ....

Page 38: Apostila SQL Plus

Structured Query Language - SQL*PLUS 38

Exemplo 2: Retirando o sublinhado

SQL> set underline off SQL> select empno, ename, hiredate, sal, comm, job

from emp;

EMPNO ENAME JOB DEPTNO 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 7654 MARTIN SALESMAN 30 7499 ALLEN SALESMAN 30 7844 TURNER SALESMAN 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 não retorne linha: no rows selected . o Comando Feedback ativa e desativa esta opção.

Sintaxe:

SET FEED[BACK] ON / OFF

SQL> select * from dept;

DEPTNO DNAME LOC --------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO

40 OPERATIONS BOSTON

SQL>

Page 39: Apostila SQL Plus

Structured Query Language - SQL*PLUS 39

Exercícios - 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 Nome Limite Credito ------- ----------------------------------------- -------------- 100 JOCKSPORTS 5000 101 TKB SPORT SHOP 10000 102 VOLLYRITE 7000 103 JUST TENNIS 3000 104 EVERY MOUNTAIN 10000 105 K + T SPORTS 5000 106 SHAPE UP 6000 107 WOMENS SPORTS 10000 108 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 espaços entre cada coluna)

100 - JOCKSPORTS 101 - TKB SPORT SHOP 102 - VOLLYRITE 103 - JUST TENNIS 104 - EVERY MOUNTAIN

5. Selecione o nome, salário anual e a comissão dos funcionários.

Page 40: Apostila SQL Plus

Structured Query Language - SQL*PLUS 40

Funções de Conversão 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 deve-se utilizar as funções de conversão.

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 Salário 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

Page 41: Apostila SQL Plus

Structured Query Language - SQL*PLUS 41

Nota: Prefixos:

0 - Com zeros no inicio $ - Com o caracter $ no inicio B - Valor zerado é exibido em branco

Sufixos:

MI - Quando o número for negativo, o sinal - aparecerá no final do número PR - Quando o número for negativo, aparecerá no formato <n> .

To_Number(char)

Converte para o formato NUMBER, um valor (numérico) em CHAR.

Exemplo:

SQL> select sal + to_number('20') from emp;

SAL+TO_NUMBER('20') ------------------- 5020 2870 2470

2995 1270 1620 1520

....

Page 42: Apostila SQL Plus

Structured Query Language - SQL*PLUS 42

To_Char (date)

Converte para o formato CHAR informado, um valor em DATE. Usado freqüentemente 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 '"Contratação realizada em" dd/mm/yy "as" hh:mi') 3 Contratações from emp;

Contratações ---------------------------------------------------------------- Contratação realizada em 24/06/94 as 09:30 Contratação realizada em 13/06/94 as 09:00

Formatos válidos para colunas DATE

Uso Descrição CC Século

SCC Século precedido de - quando for (BC) YYYY Ano com 4 dígitos

SYYYY Ano com quatro dígitos precedido de - quando for (BC) YYY ou YY ou Y

Ano com três, dois ou um digito YEAR Ano por extenso

SYEAR Ano por extenso precedido de - quando for (BC) Q Trimestre

MM Mês em representação numérica (01 - 12) MONTH Mês por extenso

MON Abreviação com três letras do mês por extenso WW Semana do ano (01-52) W Semana do mês (01-05)

DDD Dia do ano (01-366) DD Dia do mês (01-31) D Dia da semana (01-07)

DAY Dia da semana por extenso J formato Juliano, quantidade de dias desde 1 de janeiro de 4712 BC

HH ou HH12 Hora do dia (01-12) HH24 Hora do dia (00-23)

MI Minuto (00-59) SS Segundo (00-59)

SSSSS Segundos após a meia noite (00-86399)

Page 43: Apostila SQL Plus

Structured Query Language - SQL*PLUS 43

Nota Descrição BC - AC

ou B.C. - A.C.

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. AM - PM

ou A.M. - P.M.

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.

Prefixos Descrição FM Retira brancos à esquerda e zeros à direita

Sufixos Descrição TH Número ordinal SP Número por extenso

Exemplo: Selecionando o dia de admissão por extenso:

SQL> select hiredate, 2 to_char(hiredate, 'ddsp') "Dia de Admissão"

3* from emp

HIREDATE Dia de Admissão --------- ------------------------------------------------ 17-NOV-81 seventeen 01-MAY-81 one 09-JUN-81 nine 02-APR-81 two 28-SEP-81 twenty-eight 20-FEB-81 twenty 08-SEP-81 eight ....

Page 44: Apostila SQL Plus

Structured Query Language - SQL*PLUS 44

Exercícios - 06

1. Através 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: 610 realizado no: 1 trimestre de 1987 Pedido: 611 realizado no: 1 trimestre de 1987 Pedido: 612 realizado no: 1 trimestre de 1987 Pedido: 601 realizado no: 2 trimestre de 1986 Pedido: 602 realizado no: 2 trimestre de 1986 .....

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

Page 45: Apostila SQL Plus

Structured Query Language - SQL*PLUS 45

Domínio de atuação de um comando SQL DML

Clausula WHERE

Quando uma seleção, alteração ou exclusão é processada em um tabela, pode-se informar em quais linhas da tabela o comando deve atuar. A cláusula WHERE deve estabelecer a restrição para a escolha das linhas.

sintaxe:

SELECT coluna_1,coluna_2, ..., coluna_N FROM tabela WHERE coluna_restrição tipo_comparação valor

Exemplo: Selecionar apenas o funcionários 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 Comparação

A cláusula WHERE pode trabalhar com vários tipos de comparação, permitindo combinações para uma restrição mais específica para a escolha de linhas.

Igualdade =

Diferença != ou ^= ou <>

Exemplo: Selecionar departamentos com código diferente de 20.

SQL> select * from dept where deptno <> 20;

DEPTNO DNAME LOC --------- -------------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 40 OPERATIONS BOSTON

3 rows selected.

Page 46: Apostila SQL Plus

Structured Query Language - SQL*PLUS 46

Maior que >

e Maior ou Igual a >=

Menor que <

e Menor ou Igual a <=

Exemplo: Selecionar departamentos com código maior ou igual 20.

SQL> select * from dept where deptno >= 20;

DEPTNO DNAME LOC --------- -------------- ------------- 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

3 rows selected.

Testa conteúdo nulo

is null e is not null

Exemplo 1: Selecionar o funcionários que tenham registro de comissão.

SQL> select ename, job from emp where comm is not null;

ENAME JOB ---------- -------- MARTIN SALESMAN ALLEN SALESMAN TURNER SALESMAN WARD SALESMAN

4 rows selected.

Exemplo 2: Selecionar o funcionários que tenham registro de comissão.

SQL> select ename, job from emp where comm = null;

no rows selected

Neste caso o select não retornara nenhuma linha, pois o null não 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 funcionários que pertencem aos departamentos 10, 20

Page 47: Apostila SQL Plus

Structured Query Language - SQL*PLUS 47

SQL> select empno, ename , deptno from emp where deptno in (10, 20);

EMPNO ENAME DEPTNO ----- --------- --------- 7839 KING 10 7782 CLARK 10 7566 JONES 20 7902 FORD 20 7369 SMITH 20 7788 SCOTT 20 7876 ADAMS 20 7934 MILLER 10

8 rows selected.

A pesquisa retorna linhas que Pertencem a um intervalo (Inclusive)

BETWEEN valor_mínimo AND valor máximo

NOT BETWEEN valor_mínimo AND valor máximo

Exemplo: Selecionar o funcionário com salários 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)

Page 48: Apostila SQL Plus

Structured Query Language - SQL*PLUS 48

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 funcionários que tenham apenas 4 caracteres no nome:

SQL> select ename, job from emp 2 where ename like '____' /* 4 underscore */

ENAME JOB ---------- --------- KING PRESIDENT WARD SALESMAN FORD ANALYST

3 rows selected.

Testar se entre as linhas da tabela alguma atende as especificações desejadas

EXISTS

NOT EXISTS

Exemplo:

SQL> select 'Não encontrou departamento 50' from dual 2 where not exists (select * from emp 3* where deptno = 50)

'NAOENCONTROUDEPARTAMENTO50' ------------------------------------------------------ Nao encontrou departamento 50

1 row selected.

Page 49: Apostila SQL Plus

Structured Query Language - SQL*PLUS 49

Ordenando resultados de uma seleção

A ordem em que as linhas foram incluídas na tabela não é importante, a cláusula ORDER BY do comando SELECT permite exibir as tuplas do resultado, na ordem desejada pelo usuário.

Sintaxe:

SELECT coluna1,coluna2, ..., coluna_n FROM Tabela [WHERE coluna_restrição Tipo_comparação valor] ORDER BY coluna_ordenação [DESC]

Nota: Order by é ascendente por default, para se ter uma seleção decrecente, use a palavra DESC ao lado direito da coluna selecionada na cláusula ORDER BY. Pode-se classificar o resultado do seleção 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 ENAME ---------- ---------- 7876 ADAMS 7499 ALLEN 7698 BLAKE 7782 CLARK 7902 FORD 7900 JAMES 7566 JONES

....

Exemplo 2: Ordenando o resultado por ordem numérica decrescente

EMPNO ENAME --------- ---------- 7934 MILLER 7902 FORD 7900 JAMES 7876 ADAMS 7844 TURNER 7839 KING 7788 SCOTT 7782 CLARK

....

Page 50: Apostila SQL Plus

Structured Query Language - SQL*PLUS 50

Operadores Lógicos usados para Combinar mais de uma comparação

A restrição pode ser composta por uma ou mais comparações, estas devem ser combinadas usando operadores lógicos AND, OR e NOT

Comparação1 e Comparação2 AND

Exemplo:Selecionar funcionários do deptno 20 que sejam analistas

SQL> Select ename from emp where deptno = 20 and

job = ANALYST ;

ENAME ---------- FORD SCOTT

2 rows selected.

Comparação1 ou Comparação 2 OR

Exemplo: Selecionar funcionários 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.

Page 51: Apostila SQL Plus

Structured Query Language - SQL*PLUS 51

Não deve ser atendida Comparação NOT

Exemplo:

SQL> select ename from emp 2 where not ( deptno = 30);

ENAME ---------- KING CLARK JONES FORD SMITH SCOTT ADAMS MILLER

8 rows selected.

Comparação com todos os elementos do conjunto

{ =, !=, >, <, >=, <=} ALL

Exemplo: Selecionar os funcionários 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

Comparação com qualquer elemento do conjunto

{ =, !=, >, <, >=, <=} ANY

Exemplo: Selecionar funcionários com departamento igual a qualquer um da lista.

SQL> select ename, deptno from emp 2 where deptno = any (10,20);

Page 52: Apostila SQL Plus

Structured Query Language - SQL*PLUS 52

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

Page 53: Apostila SQL Plus

Structured Query Language - SQL*PLUS 53

Exercícios - 07

1. Selecione os funcionários, codigo e nome, que tenham sido contratados entre o período de 01/Maio/81 e 31/Dezembro/81.

2. Selecionar o presidente da empresa através da coluna mgr (codigo do gerente).

3. Selecionar funcionários que não tenham o cargo iniciado com A e Não sejam do departamento 10.

4. Selecionar funcionários que tem salários maiores que 1500 que sejam gerentes(MANAGER) , ou funcionários que sejam vendedores (SALESMAN).

5. Selecionar funcionários que tem salários maiores que 1500 que sejam gerentes(MANAGER) ou vendedores (SALESMAN).

6. Selecionar os pedidos (ordid) da tabela pedido (ord) que não tenham sido entregues num prazo mínimo de 10 dias, ordenando por cliente (custid).

Page 54: Apostila SQL Plus

Structured Query Language - SQL*PLUS 54

FUNÇÕES

Funções aplicáveis a valores Alfanuméricos

As funções relacionadas neste capítulo devem ser aplicadas a colunas

alfanuméricas e retornam tipos CHAR ou NUMBER.

INITCAP(char)

Retorna as iniciais de cada palavra em maiúsculas o restante da palavra em minúsculas.

Exemplo:

SQL> select initcap(dname), initcap('CURSO SQL') 2* from dept;

INITCAP(DNAME) INITCAP(' -------------- --------- Accounting Curso Sql Research Curso Sql Sales Curso Sql Operations Curso Sql

LOWER(char)

Retorna todas as letras de todas as palavras em minúsculas.

Exemplo:

SQL> select lower(dname), lower('CURSO SQL') 2* from dept;

LOWER(DNAME) LOWER('CUR ------------ ---------- accounting curso sql research curso sql sales curso sql operations curso sql

UPPER(char)

Retorna todas as letras de todas as palavras em maiúsculas.

Exemplo:

Page 55: Apostila SQL Plus

Structured Query Language - SQL*PLUS 55

SQL> select upper(dname), upper('CURSO SQL') 2* from dept;

UPPER(DNAME) UPPER('CUR ------------ ---------- ACCOUNTING CURSO SQL RESEARCH CURSO SQL SALES CURSO SQL OPERATIONS 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 ocorrência 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

Page 56: Apostila SQL Plus

Structured Query Language - SQL*PLUS 56

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 ocorrências 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 necessárias até que se complete o tamanho estabelecido.

Exemplo:

SQL> select rpad(dname, 14 , '*' ) Departamento 2* from dept;

DEPARTAMENTO -------------- ACCOUNTING**** RESEARCH****** SALES********* OPERATIONS****

Page 57: Apostila SQL Plus

Structured Query Language - SQL*PLUS 57

LPAD( char, tamanho{, char])

Retorna o valor original, preenchido a esquerda com o caracter informado, quantas vezes forem necessárias 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 representação fonética das palavras que compõem 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 não contido no conjunto de caracteres informados, inicia a pesquisa pela direita. Se não for especificado o conjunto de caracteres, assumirá por default um branco.

Page 58: Apostila SQL Plus

Structured Query Language - SQL*PLUS 58

Exemplo:

SQL> select dname, ltrim(dname,'A'), ltrim(dname,'ASOP') 2* from dept;

DNAME LTRIM(DNAME,'A LTRIM(DNAME,'A -------------- -------------- -------------- ACCOUNTING CCOUNTING CCOUNTING RESEARCH RESEARCH RESEARCH SALES SALES LES OPERATIONS OPERATIONS ERATIONS

LTRIM(char [,conjunto_de_caracteres])

Retorna o string com os caracteres iniciais removidos até o primeiro caracter não contido no conjunto de caracteres informados, inicia a pesquisa pela esquerda. Se não 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 RTRIM(DNAME,'S RTRIM(DNAME,'G -------------- -------------- -------------- ACCOUNTING ACCOUNTING ACCOUNTIN RESEARCH RESEARCH RESEARC SALES SALE SALE OPERATIONS OPERATION OPERATION

TRANSLATE(char, caracter_antigo, caracter_novo)

Retorna o string com todos os caracteres informados substituídos.

Exemplo:

SQL> select ename, translate(ename,'C', 'P') , 2 * job, translate(job, 'AR', 'IT') from emp;

ENAME TRANSLATE( JOB TRANSLATE ---------- ---------- --------- --------- KING KING PRESIDENT PTESIDENT BLAKE BLAKE MANAGER MINIGET CLARK PLARK MANAGER MINIGET ALLEN ALLEN SALESMAN SILESMIN JAMES JAMES CLERK CLETK .....

Page 59: Apostila SQL Plus

Structured Query Language - SQL*PLUS 59

Exercícios - 08

1. Selecionar a descrição do departamento centralizada na tela.

Nome ---------------------------------------------------------------- ACCOUNTING RESEARCH SALES OPERATIONS

2. Selecionar o produto, apresentando a descrição apenas até a palavra TENNIS .

Descricao Descricao ------------------------------ ------------------------------ ACE TENNIS RACKET I ACE ACE TENNIS RACKET II ACE ACE TENNIS BALLS-3 PACK ACE ACE TENNIS BALLS-6 PACK ACE ACE TENNIS NET ACE SP TENNIS RACKET SP SP JUNIOR RACKET RH: "GUIDE TO TENNIS" RH: "GUIDE TO SB ENERGY BAR-6 PACK SB VITA SNACK-6 PACK

Page 60: Apostila SQL Plus

Structured Query Language - SQL*PLUS 60

Funções aplicáveis a Valores Numéricos

As funções relacionadas neste capítulo devem ser aplicadas a colunas do tipo

NUMBER, sendo o retorno do tipo NUMBER.

SIGN(number)

Testa o conteúdo de uma coluna numérica: 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 número.

Exemplo:

SQL> select abs(100 - 150) vl_abs from dual;

VL_ABS --------- 50

CEIL(number)

Retorna o menor número inteiro, que seja maior ou igual ao número

Exemplo:

SQL> select ceil(14.4) from dual;

CEIL(14.4) ---------- 15

Page 61: Apostila SQL Plus

Structured Query Language - SQL*PLUS 61

FLOOR(number)

Retorna o maior número inteiro, que seja menor ou igual ao número

Exemplo:

SQL> select floor(14.4) from dual;

CEIL(14.4) ---------- 14

MOD(dividendo, divisor)

Retorna o resto da divisão de um número 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 potenciação, 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 número.

Exemplo:

SQL> select SQRT(16) from dual;

Page 62: Apostila SQL Plus

Structured Query Language - SQL*PLUS 62

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

ROUND(number[,n_decimal])

Retorna o número 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 número truncado em n casas decimais.

Exemplo:

SQL> select trunc(123.456 , 2) from dual;

TRUNC(123.456,2) ---------------- 123.45

OUTRAS FUNÇÕES:

SIN(number) Seno de um número COS(number) Coseno TAN(number) Tangente LN(number) Logaritmo Natural LOG(m,n) Logaritmo da base m por n

Page 63: Apostila SQL Plus

Structured Query Language - SQL*PLUS 63

Exercícios - 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 código e descrição dos produtos, alinhada à direta, ordenados de forma decrescente pelo tamanho do nome.

Page 64: Apostila SQL Plus

Structured Query Language - SQL*PLUS 64

Funções aplicáveis a Datas

As funções relacionadas neste capítulo 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, número_meses)

Retorna a data somada ou subtraída de n meses.

Exemplo:

SQL> select hiredate, add_months(hiredate, 2) "2 meses depois" 2 from emp;

HIREDATE 2 meses d --------- --------- 17-NOV-81 17-JAN-82 01-MAY-81 01-JUL-81 09-JUN-81 09-AUG-81 02-APR-81 02-JUN-81 28-SEP-81 28-NOV-81 20-FEB-81 20-APR-81 08-SEP-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

Page 65: Apostila SQL Plus

Structured Query Language - SQL*PLUS 65

HIREDATE DIFERENCA --------- --------- 17-NOV-81 7.7741935 01-MAY-81 14.290323 09-JUN-81 13.032258 02-APR-81 15.258065 28-SEP-81 9.4193548 20-FEB-81 16.677419 08-SEP-81 10.064516 ....

LAST_DAY(data)

Retorna a data que corresponde ao ultimo dia do mês

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 próximo 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 início do período segundo o formato informado.

Page 66: Apostila SQL Plus

Structured Query Language - SQL*PLUS 66

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 início do período (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

Page 67: Apostila SQL Plus

Structured Query Language - SQL*PLUS 67

Exercícios - 10

1. Os funcionários contratados até o dia 15, recebem seus salários na última sexta feira do mês, os demais na última sexta do mes seguinte. Desta forma identifique os funcionários, data admissão e data de pagamento.

2. Selecione da tabela emp, o nome do funcionário e total de dias existentes entre sua admissão e o ultimo dia do mês de admissão, ordenando pelos dias pares.

3. Selecione da tabela emp, o nome do funcionário e total de dias existentes entre sua admissão e o último dia do ano de admissão.

Page 68: Apostila SQL Plus

Structured Query Language - SQL*PLUS 68

Agrupando resultados de uma seleção

GROUP BY

Os dados que são recuperados numa seleção podem ser agrupados de acordo com um critério específico. O agrupamento implica na exibição de uma e somente uma linha por grupo; além disso, só é permitido selecionar as colunas especificadas na cláusula GROUP BY e/ou funções de grupo.

A cláusula GROUP BY do comando SELECT, determina o critério a ser utilizado na formação dos grupos.

Sintaxe:

SELECT [coluna1,]funcao(coluna2) FROM tabela [WHERE coluna_restrição Tipo_comparação valor] GROUP BY coluna_agrupamento [ORDER BY coluna [ASC/DESC]]

Nota: Pode-se fazer uso de várias funções, que por definição já selecionam grupos de linhas, gerando apenas um resultado para este grupo.

Funções de Grupo

COUNT({* / [DISTINCT / ALL ] nome_coluna / expressão})

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.

Page 69: Apostila SQL Plus

Structured Query Language - SQL*PLUS 69

SUM([DISTINCT / ALL] number)

Retorna o somatório de uma coluna.

Exemplo:

SQL> select sum(sal), job from emp 2* group by job;

SUM(SAL) JOB --------- --------- 6000 ANALYST 4150 CLERK 8275 MANAGER 5000 PRESIDENT 5600 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 / expressão})

Retorna o menor valor de uma coluna.

Exemplo:

SQL> select min(sal) "Menor Salario" 2* from emp;

Menor Salario ------------- 800

1 row selected.

Page 70: Apostila SQL Plus

Structured Query Language - SQL*PLUS 70

Exemplo 2: Selecionar o funcionário que com maior salário 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 / expressão})

Retorna o maior valor de uma coluna.

Exemplo: Selecionar o funcionário 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 / expressão})

Retorna a média aritmética 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.

Page 71: Apostila SQL Plus

Structured Query Language - SQL*PLUS 71

STDDEV( [DISTINCT / ALL ] {nome_coluna / expressão})

Retorna o desvio padrão de uma coluna.

Exemplo:

SQL> select stddev(sal) 2* from emp;

STDDEV(SAL) ----------- 1182.5032

1 row selected.

VARIANCE( [DISTINCT / ALL ] {nome_coluna / expressão})

Retorna a variância de uma coluna.

Exemplo:

SQL> select variance(sal) 2* from emp;

VARIANCE(SAL) ------------- 1398313.9

1 row selected.

Page 72: Apostila SQL Plus

Structured Query Language - SQL*PLUS 72

Selecionando Grupos

HAVING

Pode-se também determinar para quais grupos serão exibidos os dados selecionados; basta indicar na cláusula HAVING o critério a ser utilizado para essa determinação.

A cláusula HAVING primeiramente agrupa e depois seleciona os grupos que correspondem ao critério requisitado; esta cláusula proporciona maior rapidez já que o teste de seleção é feito sobre grupos e não a partir de linhas.

Sintaxe:

SELECT coluna1, funcao(coluna2) FROM tabela GROUP BY coluna_1 HAVING coluna_restrição Tipo_comparação valor [ORDER BY coluna_ordenação [ASC/DESC]]

nota: Sempre deve-se indicar a coluna de agrupamento (GROUP BY) e a seleção 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.

Page 73: Apostila SQL Plus

Structured Query Language - SQL*PLUS 73

Exercícios - 11

1. Selecione o código e a média salarial arrendondada em 2 casas decimais e no formato 999,999.99, dos departamentos que possuem média salarial maior que 2000.

2. Selecione o código e a média salarial dos departamentos que possuem mais de três funcionários.

3. Selecionar o menor e o maior salário, a média salarial e o número de funcionários 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.

Page 74: Apostila SQL Plus

Structured Query Language - SQL*PLUS 74

Funções Genéricas

As funções vistas nesta sessão podem ser aplicadas a qualquer tipo de dado.

DECODE(valor, comparação_1, valor_1[, comparação_N, valor_N], [valor_default])

Retorna um valor decodificado de acordo com uma comparação.

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 Cargo ---------- ---------- ADAMS Outros ALLEN Vendedor BLAKE Gerente CLARK Gerente FORD Outros JAMES Outros JONES Gerente KING Presidente MARTIN Vendedor MILLER Outros SCOTT Outros SMITH Outros TURNER Vendedor WARD 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;

Page 75: Apostila SQL Plus

Structured Query Language - SQL*PLUS 75

Nome Tipo de Salar ---------- ------------- KING Salario Alto BLAKE Salario Alto CLARK Salario Alto JONES Salario Alto MARTIN Salario baixo ALLEN Salario Alto TURNER Salario Alto JAMES Salario baixo WARD Salario baixo FORD Salario Alto SMITH Salario baixo SCOTT Salario Alto ADAMS Salario baixo MILLER 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 usuário caso o valor seja nulo, do contrário retorna o valor original.

Exemplo:

SQL> select sal, comm, sal + comm from emp;

Page 76: Apostila SQL Plus

Structured Query Language - SQL*PLUS 76

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 usuário ORACLE logado:

Exemplo:

SQL> select user from dual;

USER -------------- SCOTT

Page 77: Apostila SQL Plus

Structured Query Language - SQL*PLUS 77

UID

Retorna um número inteiro que identifica o usuário ORACLE corrente

Exemplo:

SQL> select UID from dual;

UID ---------- 5645

Page 78: Apostila SQL Plus

Structured Query Language - SQL*PLUS 78

Exercícios - 12

1. Selecionar nome, cargo e salário aumentado de acordo coma tabela:

Analista - ANALYST 10% Atendente - CLERK 15% Gerente - MANAGER 20%

2. Selecione o maior valor entre salário e comissão para os funcionários;

Page 79: Apostila SQL Plus

Structured Query Language - SQL*PLUS 79

Capítulo 6

RECUPERANDO DADOS DE VÁRIAS TABELAS

É possível exibir numa mesma tupla de resultado, dados que estejam em tabelas

diferentes; este tipo de operação é chamada de JOIN. Quando o JOIN é realizado entre duas tabelas, serão 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 são úteis. Por esta razão, todo JOIN deve possuir esta igualdade entre os pares ordenados, expressa na cláusula WHERE.

sintaxe:

SELECT [ALL / DISTINCT] {[nome_da_tabela] * } [nome_da_tabela.]nome_da_coluna[,função([nome_da_tabela.] nome_da_coluna)] FROM nome_da_tabela, nome_da_tabela [WHERE ...] [GROUP BY ...] [HAVING ...] [ORDER BY ...]

EQUI-JOIN ou RELAÇÃO 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

Page 80: Apostila SQL Plus

Structured Query Language - SQL*PLUS 80

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 RELAÇÃO INDIRETA:

Quando não 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 não contém todos os elementos existentes na outra. Neste caso algumas linhas não serão recuperadas. Para que isto não ocorra, utiliza-se o (+) ao lado da tabela onde os elementos estão faltando.

Exemplo:

SQL> SELECT ename, b.deptno, dname FROM emp a, dept d WHERE a.deptno (+) = b.deptno;

Page 81: Apostila SQL Plus

Structured Query Language - SQL*PLUS 81

DEPTNO DNAME SAL --------- -------------- --------- 10 ACCOUNTING 5000 10 ACCOUNTING 2450 10 ACCOUNTING 1300 20 RESEARCH 2975 20 RESEARCH 3000 20 RESEARCH 1100 20 RESEARCH 800 20 RESEARCH 3000 30 SALES 2850 30 SALES 1250 30 SALES 1600 30 SALES 1500 30 SALES 950 30 SALES 1250 40 OPERATIONS

15 rows selected.

SQL> SELECT count(empno), dname FROM emp, dept WHERE emp.deptno (+) = dept.deptno GROUP BY dname;

Nr Funcionários Departamento --------------- -------------- 3 ACCOUNTING 0 OPERATIONS 5 RESEARCH 6 SALES

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

Page 82: Apostila SQL Plus

Structured Query Language - SQL*PLUS 82

Operações com conjuntos

Todo resultado de uma seleção pode ser definido como um conjunto. A estes

conjuntos podem-se aplicar as operações básicas da teoria de conjuntos, como:

UNION (Distinct/All)

Distinct - Permite unir os elementos resultantes de duas seleções de forma que apareçam 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 seleções de forma que apareçam oriundos de uma única seleção (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 NOME --------- -------------- 10 ACCOUNTING 7876 ADAMS 7499 ALLEN 7698 BLAKE 7782 CLARK 7902 FORD 7900 JAMES 7566 JONES 7839 KING 7654 MARTIN 7934 MILLER 40 OPERATIONS 20 RESEARCH 30 SALES 7788 SCOTT 7369 SMITH 7844 TURNER 7521 WARD

18 rows selected.

Page 83: Apostila SQL Plus

Structured Query Language - SQL*PLUS 83

INTERSECT

Permite exibir os elementos resultantes de duas seleções que sejam comuns ás duas (retorna as linhas comuns as duas queries requeridas).

Resultado: A B = {1,3 }

Exemplo:

SQL> select prodid, descrip from product 2 where descrip like '%RACKET%' 3 intersect 4 select prodid, descrip from product;

PRODID DESCRIP --------- ------------------------------ 100860 ACE TENNIS RACKET I 100861 ACE TENNIS RACKET II 101860 SP TENNIS RACKET 101863 SP JUNIOR RACKET

4 rows selected.

MINUS

Permite mostrar os elementos resultantes de uma seleção que não estejam contidos na outra (recupera as linhas que não tem correspondência).

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 DESCRIP --------- ------------------------------ 100870 ACE TENNIS BALLS-3 PACK 100871 ACE TENNIS BALLS-6 PACK 100890 ACE TENNIS NET 102130 RH: "GUIDE TO TENNIS" 200376 SB ENERGY BAR-6 PACK 200380 SB VITA SNACK-6 PACK

6 rows selected.

Page 84: Apostila SQL Plus

Structured Query Language - SQL*PLUS 84

SUBQUERY

Quando a pesquisa depende dos próprios dados da tabela.

Exemplo: Selecione os funcionários 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 JOB ----- --------- JONES MANAGER BLAKE MANAGER CLARK MANAGER

SUBQUERY- CORRELATA

Usa parâmetros da query principal

Exemplo: Selecione os funcionários que tenham salários 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

Page 85: Apostila SQL Plus

Structured Query Language - SQL*PLUS 85

Exercícios - 13

1. Selecione todos os funcionários que pertecem a grade salarial 3.

2. Selecione todos os departamentos e total de salários de cada um deles.

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

4. selecionar funcionários que tenham cargos iguais aos dos funcionários do departamento 30.

5. selecionar funcionários com o mesmo cargo de JONES ou com salário maior ou igual ao salário de FORD, inclusive.

6. Selecione da tabela departamento (dept) os nome e local dos departamentos que não possuem funcionários.

7. Selecionar o cargo, nome e salário dos funcionários que têm os maiores salários de seus departamentos em ordem decrescente de salário.

Page 86: Apostila SQL Plus

Structured Query Language - SQL*PLUS 86

Capítulo 7

ATUALIZAÇÃO DE DADOS

De uma forma geral, em uma transação pode-se executar inclusões, seleções,

alterações e exclusões. Quando a transação é finalizada com o COMMIT, estas modificações tomam-se disponíveis para todos os usuários que tenham acesso a esses dados.

As vezes, as alterações realizadas por outros usuários podem distorcer o resultado das seleções feitas em uma sessão. Por exemplo, em caso de relatórios que envolvam números.

É possível a um usuário ter uma visão congelada do RDBMS em um determinado momento, ou seja, desconsiderando quaisquer modificações que por ventura venham a ser feitas por outros usuários.

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 <condição> Exemplo 1: Retirar comissão dos funcionários que Não sejam gerentes ou vendedores.

SQL> Update emp set comm = null where job not in ( MANAGER , SALES );

Page 87: Apostila SQL Plus

Structured Query Language - SQL*PLUS 87

Exemplo 2: Alterar os salários e comissões com a média 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 /

Page 88: Apostila SQL Plus

Structured Query Language - SQL*PLUS 88

Capítulo 8

EXCLUSÃO DE LINHAS DE UMA TABELA

Delete

Comando usado para excluir uma ou mais linhas de uma tabela.

sintaxe:

DELETE [FROM] nome_tabela WHERE <Condição>

Exemplo 1:

SQL> Delete salgrade;

5 rows deleted.

exemplo 2:

SQL> Delete from emp where job = SALESMAN and comm < 100;

Page 89: Apostila SQL Plus

Structured Query Language - SQL*PLUS 89

Exercícios - 14

1. Aumentar o valor das comissões dos funcionários em 10%, somente dos que possuem comissão.

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

3. Remover funcionários dos departamentos que não têm sua somatória de salários maiores que 10000.

4. Remover os departamentos da tabela dept que não possuem funcionários.

Page 90: Apostila SQL Plus

Structured Query Language - SQL*PLUS 90

Capítulo 9

MANIPULANDO OBJETOS DO RDBMS

Uma vez criadas a(s) tabela(s) no Banco de Dados, pode-se criar comentários,

documentação sobre as tabelas e colunas. Esta documentação será armazenada no dicionário de dados do ORACLE. E para recuperar esta documentação deverão ser acessadas as tabelas:

ALL_COL_COMMENTS Para todas as colunas existentes no Banco de Dados. USER_COL_COMMENTS Para todas as colunas criadas por um usuário. ALL_TAB_COMMENTS Para todas as tabelas existentes no Banco de Dados. USER_TAB_COMMENTS Para todas as tabelas criadas por um usuário.

Para criar um comentário 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 'comentário'

Exemplo 1:

SQL> comment on table emp is 'text';

Comment created.

Exemplo 2:

SQL> comment on column emp.comm is 'Comissão dos vendedores e gerentes';

Comment created.

Para retirar o comentário de alguma tabela e/ou coluna deve-se gravar um comentário com espaços.

Exemplo 3:

SQL> comment on column emp.comm is ' ';

Comment created.

Page 91: Apostila SQL Plus

Structured Query Language - SQL*PLUS 91

Criando uma Tabela a partir de outra Tabela

Não há um comando que excluía uma coluna de uma tabela. Se a coluna for desnecessária, 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 [restrição] [, nome_coluna [restrição]] [,restrições])

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

É possível remover a definição 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 serão eliminados; - As views permanecerão, mas se tornarão invalidas; - Algumas transações pendentes serão 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;

Page 92: Apostila SQL Plus

Structured Query Language - SQL*PLUS 92

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, não e permitida a alteração do tipo de dado de uma coluna; para realizar tal modificação e necessário 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.

Page 93: Apostila SQL Plus

Structured Query Language - SQL*PLUS 93

Create View (Visões)

As vezes uma tabela possui colunas que não devem ser visíveis por todos os usuários; desta forma e necessário criar uma visão parcial da tabela. Uma view é uma tabela lógica que não ocupa espaço no Banco de Dados, pode ser composta de linhas de uma ou mais tabelas, agrupadas ou não. As views não 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. Porém, 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 - Expressões do tipo concatenação, conversão, funções de grupo, ...

REPLACE - Se a visão já existir recria com o mesmo nome FORCE - Cria a visão mesmo se a tabela referenciada não 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? Type ------------------------------- -------- ----

ENAME VARCHAR2(10) DNAME VARCHAR2(14) TOTAL_SAL NUMBER

SQL> select * from emp_dept 2 order by ename;

Page 94: Apostila SQL Plus

Structured Query Language - SQL*PLUS 94

ENAME DNAME TOTAL_SAL ---------- -------------- --------- ADAMS RESEARCH 1100 ALLEN SALES 1600 BLAKE SALES 2850 CLARK ACCOUNTING 2450 FORD RESEARCH 3000 JAMES SALES 950 JONES RESEARCH 2975 KING ACCOUNTING 5000 MARTIN SALES 1250 MILLER ACCOUNTING 1300 SCOTT RESEARCH 3000 SMITH RESEARCH 800 TURNER SALES 1500 WARD SALES 1250

14 rows selected.

Drop View

Não havendo mais necessidade, uma visão pode ser removida da base.

Sintaxe:

DROP VIEW nome_view

Exemplo:

SQL> Drop view emp_dept;

View dropped.

Page 95: Apostila SQL Plus

Structured Query Language - SQL*PLUS 95

Criando Seqüências

Seqüência é uma estrutura criada no Banco de Dados que retorna para cada acesso um número diferente. Ela pode ser utilizada para fornecer seqüencialmente e sem repetição, valores a serem armazenados em códigos que formam a chave primária 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 número | NOCACHE]

INCREMENT BY se não for especificado assume por default 1; CYCLE | NOCYCLE determina se a seqüência e cíclica ou não. Se for

cíclica, quando atingir o valor máximo, voltara ao valor inicial; CACHE |NOCACHE determina se os valores da seqüência devem ser pré- alocados em memória ou não.

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 seqüência: Valor corrente : CURRVAL Próximo valor : NEXTVAL

Exemplo:

SQL> select seq_pedido.nextval 2* from dual;

NEXTVAL --------- 8000

Page 96: Apostila SQL Plus

Structured Query Language - SQL*PLUS 96

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 parâmetros de uma seqüência podem ser alterados através do comando ALTER SEQUENCE.

Exemplo:

SQL> alter sequence seq_funcionario increment by 2;

Uma definição de seqüência e excluída através do comando DROP SEQUENCE.

Sintaxe:

Drop sequence nome_da_sequencia;

Exemplo:

SQL> Drop sequence seq_funcionario;

Sequence dropped.

Page 97: Apostila SQL Plus

Structured Query Language - SQL*PLUS 97

Índices

Quando se cria um índice em uma tabela, o ORACLE monta uma estrutura que permite o encontro rápido 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 criação do índice. O índice pode ser único ou não. Quando uma tabela e criada com constraints Primary key ou Unique já é criado um índice que identifica a chave primária.

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 compõem o índice não 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 definição de um índice não pode ser alterada. Se o índice for criado errado ou não for mais necessário, basta exclui-lo.

Sintaxe:

DROP INDEX nome_indice

Exemplo:

SQL> Drop table ind_emp_mgr;

Index dropped.

Page 98: Apostila SQL Plus

Structured Query Language - SQL*PLUS 98

Lock

Durante algumas operações com tabelas e necessário limitar, por determinado momento o acesso aquela tabela ou a seus dados.

E possível realizar o Lock de duas maneiras, através 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 nível 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 não for possível realizar o Lock no momento o comando NOWAIT libera o processo, senão aguarda até conseguir efetuar o lock; O lock e finalizado pelos comandos COMMIT ou ROLLBACK;

Exemplo:

Lock table dep in share mode;

Page 99: Apostila SQL Plus

Structured Query Language - SQL*PLUS 99

Exercícios - 15

1. Criar uma seqüência para facilitar entrada de dados na tabela de pedido:

incrementar 1, iniciar com 1000, valor mínimo 000001, valor máximo 999999, não cíclica

2. Incluir dois pedidos na tabela Ord usando a seqüência para incrementar o número do pedido ( ordid).

3. Criar uma visão que apresente, o codigo do cliente (custid), nome (name), o número do pedido (ordid) e total de cada pedido(total).

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

Page 100: Apostila SQL Plus

Structured Query Language - SQL*PLUS 100

Capítulo 10

PERMISSÕES PARA USUÁRIOS

A princípio um usuário só pode acessar objetos criados por ele. Mas com

algumas permissões ou restrições ele poderá fazer outras intervenções na base de dados.

GRANT

O comando GRANT fornece privilégios necessários para que o usuário possa acessar de diversas maneiras os objetos da base.

Sintaxe:

GRANT {privilégio_1[,privilégio_2] [ / ALL[PRIVILEGES]} ON nome_objeto TO [usuário_1[,usuário_2] / PUBLIC] [ WITH GRANT OPTION]

ALL PRIVILEGES - fornece todos os privilégios possíveis ao usuário para um determinado objeto.

PUBLIC - o grant vale para todos os usuários cadastrados

WITH GRANT OPTION - o usuário pode repassar seus privilégios para outros usuários que ele criar.

Privilégios 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 seqüências

UPDATE - Pode alterar dados das tabelas ou views

Page 101: Apostila SQL Plus

Structured Query Language - SQL*PLUS 101

Exemplo1: Permitindo que o usuário curso1 possa acessar a tabela emp fazendo consultas, inserções , deleções e alterações 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 usuário curso2 possa acessar a tabela emp fazendo consultas, inserções, deleções e alterações e repassando este privilégio para seus subordinados.

SQL> grant select, insert, delete, update 2* on emp to curso2;

grant succeeded.

REVOKE

Para retirar um ou mais privilégios.

Sintaxe:

REVOKE {privilégio_1[, privilégio_2] / ALL { PRIVILEGES]} ON nome_objeto FROM { usuário_1[,usuário_2] / PUBLIC

Exemplo 1: Retirando todos os privilégios do usuário Curso1 para tabela EMP

SQL> Revoke all on emp from curso1;

Revoke succeeded.

Exemplo 2: Retirando privilégio de alteração da tabela emp para usuário Curso2

SQL> Revoke update on emp from Curso2;

Revoke succeeded.

Quando o privilégio de um usuário que tem a opção WITH GRANT OPTION é retirado, automaticamente é retirado o privilégio dos usuários que herdaram o privilégio dele.

Page 102: Apostila SQL Plus

Structured Query Language - SQL*PLUS 102

CONNECT

É possível se conectar como outro usuário ORACLE sem encerrar a sessão corrente.

Sintaxe:

CONN[ECT] [usuário/senha]

Exemplo:

SQL> Connect curso1/curso1

Para retornar:

SQL> Connect curso/curso

DISCONNECT

O comando Disconnet desfaz a conexão com o RDBMS, Não encerra a sessão. 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>

Page 103: Apostila SQL Plus

Structured Query Language - SQL*PLUS 103

Capítulo 11

MONTAGEM DE RELATÓRIOS A PARTIR DO SQL*PLUS

É possível formatar o resultado de uma query, como os heading,

totalizações, títulos e rodapés, através de comandos SQL*PLUS

SQL> select ename, job, comm, sal 2* from emp;

ENAME JOB COMM SAL --------- --------- --------- --------- KING PRESIDENT 5000 BLAKE MANAGER 2850 CLARK MANAGER 2450 JONES MANAGER 2975 MARTIN SALESMAN 1400 1250 ALLEN SALESMAN 300 1600 TURNER SALESMAN 0 1500 JAMES CLERK 950 WARD SALESMAN 500 1250 FORD ANALYST 3000 SMITH CLERK 800 SCOTT ANALYST 3000 ADAMS CLERK 1100 MILLER CLERK 1300

14 rows selected.

Alteração de labels e formatação 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 heading nome format a6 SQL> column job heading cargo SQL> column comm noprint SQL> column sal heading salário format 999,999,999.99 SQL> set feed off SQL> /

Page 104: Apostila SQL Plus

Structured Query Language - SQL*PLUS 104

nome cargo salário ------ --------- ---------------- KING PRESIDENT 5,000.00 KLAKE MANAGER 2,850.00 CLARK MANAGER 2,450.00 JONES MANAGER 2,975.00 ARTIN SALESMAN 1,250.00 ALLEN SALESMAN 1,600.00 TURNER SALESMAN 1,500.00 JAMES CLERK 950.00 WARD SALESMAN 1,250.00 FORD ANALYST 3,000.00 .....

SQL> column sal heading 'Sal Mensal'

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

Para listar conteúdo 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

Page 105: Apostila SQL Plus

Structured Query Language - SQL*PLUS 105

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 número [DUP/NODUP]

SQL> break on job skip 1 nodup

cargo nome salário --------- ---------- ------------ ANALYST FORD 3,000.00 SCOTT 3,000.00 CLERK JAMES 950.00 SMITH 800.00 MILLER 1,300.00 ADAMS 1,100.00

MANAGER BLAKE 2,850.00 CLARK 2,450.00 JONES 2,975.00

PRESIDENT KING 5,000.00

SALESMAN MARTIN 1,250.00 ALLEN 1,600.00 WARD 1,250.00 TURNER 1,500.00

Para listar e reinicializar breaks:

BREAK

CLEAR BREAKS

Page 106: Apostila SQL Plus

Structured Query Language - SQL*PLUS 106

Totalizando as quebras

Sintaxe:

BREAK ON coluna_break COMPUTE <função> OF coluna_1 coluna_2 coluna_n

ON break_coluna

Funções:

SUM, MIN, MAX, AVG, STD, VAR, COUNT - retorna o número de linhas não nulas NUM - retorna o número de linhas (nulas inclusive)

SQL> compute sum of sal on job SQL> /

cargo nome salário --------- ---------- ------------ ANALYST FORD 3,000.00 SCOTT 3,000.00

********* ------------ sum 6,000.00 CLERK JAMES 950.00 SMITH 800.00 MILLER 1,300.00 ADAMS 1,100.00

********* ------------ sum 4,150.00 MANAGER BLAKE 2,850.00 CLARK 2,450.00 JONES 2,975.00

********* ------------ sum 8,275.00 PRESIDENT KING 5,000.00

********* ------------ sum 5,000.00 SALESMAN MARTIN 1,250.00 ALLEN 1,600.00

WARD 1,250.00 TURNER 1,500.00

********* ------------ sum 5,600.00

Page 107: Apostila SQL Plus

Structured Query Language - SQL*PLUS 107

Totalizando apenas no final do relatório:

Exemplo:

SQL> break on report SQL> compute sum of sal on report

cargo nome salário --------- ---------- ------------ 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 títulos no relatório

Sintaxe:

TTITLE posição titulo SKIP número TTITLE ON/OFF

A posição possíveis: CENTER, RIGHT, LEFT

Exemplo:

SQL> ttitle center 'RELAÇÃO DE FUNCIONÁRIOS - CARGOS E SALÁRIOS' - > skip 1 -

> center ============================================ skip 1

Fri Sep 06 page 1

RELAÇÃO DE FUNCIONÁRIOS - CARGOS E SALÁRIOS =============================================

Page 108: Apostila SQL Plus

Structured Query Language - SQL*PLUS 108

cargo Nome salário --------- ---------- ------------ 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 rodapés no relatório

Sintaxe:

BTITLE posição titulo SKIP número BTITLE ON/OFF

A posição possíveis:

CENTER, RIGHT, LEFT

SQL> btitle center '------------------------ Confidencial ----------------------------' SQL> / Fri Sep 06 page 1

RELAÇÃO DE FUNCIONÁRIOS - CARGOS E SALÁRIOS =============================================

cargo nome salário --------- ---------- --------------- 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 -------------------

Page 109: Apostila SQL Plus

Structured Query Language - SQL*PLUS 109

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 variáveis do SQL*PLUS e o comando SQL devem estar montados previamente.

O arquivo gerado terá extensão .lst , se não lhe for atribuída outra. Geralmente é preparado um arquivo chamado FLAT FILE e simplesmente

executado sempre que necessário. Desta forma teremos:

SQL> ed relat.sql

column ename heading nome format a6 column job heading cargo column comm noprint column sal heading salário 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 'RELAÇÃO DE FUNCIONÁRIOS - CARGOS E SALÁRIOS' Skip 1 - center ============================================ skip 2 -- btitle center '------------------------ Confidencial ----------------------------' -- Listar todos os funcionários e salários 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

Page 110: Apostila SQL Plus

Structured Query Language - SQL*PLUS 110

CAPÍTULO 12

PASSAGEM DE PARÂMETROS PARA EXECUÇÃO DO SELECT

É permitido o uso de parâmetros para execuçao de qualquer comando SQL.

Através da variável de sistema DEF[INE] se especifica qual o caracter que identifica o parâmetro. Quando o SQL executa o comando e encontra o caracter definido , ele solicita as usuário um valor para substituir pelo parâmetro.

Sintaxe:

<Comando_sql> WHERE COLUNA <operador> &PARAMETRO

Exemplo: Selecionar nome, salário dos funcionarios sob gerencia escolhida.

SQL> show define define "&" (hex 26)

SQL> select ename "Nome", sal "Salário" 2 from emp where mgr = &gerente;

Enter value for gerente: 7839

old 2: where mgr = &Gerente new 2: where mgr = 7839

Nome Salário ---------- --------- BLAKE 2850 CLARK 2450 JONES 2975

Exemplo 2: Selecionar nome, salário dos funcionarios sob cargo escolhido

SQL> select ename "Nome", sal "Salário" 2 from emp 3* where job = upper('&cargo');

Enter value for cargo: salesman

old 2: where job = upper('&cargo') new 2: where job = upper('salesman')

Nome Salário ---------- --------- MARTIN 1250

Page 111: Apostila SQL Plus

Structured Query Language - SQL*PLUS 111

ALLEN 1600 TURNER 1500 WARD 1250.

Para executar novamente o comando passando outro parâmetro basta usar / ;

SQL> /

Enter value for cargo: Manager

old 2: where job = upper('&cargo') new 2: where job = upper('Manager')

Nome Salário ---------- --------- BLAKE 2850 CLARK 2450 JONES 2975

Quando o SQL*PLUS encontra o caracter & ,ele verifica se a variável a ser substituída já está criada. Se não estiver , solicita um valor para a mesma.

O comando DEF[INE] serve para criar uma variável e para verificar se ela já existe ou não.

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 "Salário" from emp 2* where job = upper('&cargo');

old 2: where job = upper('&cargo') new 2: where job = upper('CLERK')

Nome Salário ---------- ---------

Page 112: Apostila SQL Plus

Structured Query Language - SQL*PLUS 112

JAMES 950 SMITH 800 ADAMS 1100 MILLER 1300

o comando && determina que se a variável não existir, ela deve ser criada.

SQL> select ename "Nome", sal "Salário" from emp 2* where sal < &&salario;

Enter value for salario: 1500

old 2: where sal < &&salario new 2: where sal < 1500

Nome Salário ---------- --------- MARTIN 1250 JAMES 950 WARD 1250 SMITH 800 ADAMS 1100 MILLER 1300

6 rows selected.

SQL> /

old 2: where sal < &&salario new 2: where sal < 1500

Nome Salário ---------- --------- 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 variável, mesmo que ela já esteja definida.

Page 113: Apostila SQL Plus

Structured Query Language - SQL*PLUS 113

Sintaxe:

ACC[EPT] variavel [NUM[BER] / CHAR [PROMPT text] NOPR[OMPT]] [HIDE]

Onde: PROMPT texto - deve apresentar o texto para solicitação de entrada; NOPROMPT - não apresenta o texto; HIDE - o valor preenchido não aparece na digitção (senhas).

Exemplo:

SQL> accept salario prompt 'Informe o salário base: '

Informe o salário base: 1000

SQL> select ename "Nome", sal "Salário" from emp 2* where sal < &&salario;

old 2: where sal < &&salario new 2: where sal < 1000

Nome Salário ---------- --------- JAMES 950 SMITH 800

O Comando VERIFY suprime a apresentação da substituicao.

SQL> set verify off SQL>

SQL> accept salario prompt 'Informe o salário base: '

Informe o salário base: 1000

SQL> select ename "Nome", sal "Salário" from emp 2* where sal < &&salario;

Nome Salário ---------- --------- JAMES 950 SMITH 800