Académique Documents
Professionnel Documents
Culture Documents
ao ORACLE
• Hierárquico
• Lista invertida
• Rede
• Relacional
• Tabelas
• Colunas
• Linhas
• Campos
TABELA
Campo
Coluna
Uma relação pode ser vista como uma tabela. A recuperação de dados é
feita através de operações relacionais sobre estas tabelas.
RELAÇÃO DESCRIÇÃO
INTERSECTION
DIFFERENCE
PRODUTO
SQL*Plus
Forms
Reports
Case
Pro*Oracle SQL ORACLE
Card KERNEL
Graphics
SQL*Net
SQL*Loader
• Interpretar SQL.
SQL*PLUS
SQL + Parâmetros de DB
controle de ORACLE
comandos Formatação
de controle
Características principais:
• Declaração de variáveis.
• Atribuições ( X := Y + Z).
• Controles condicionais ( IF, THEN, ELSE, ELSIF, GO TO).
• Repetições de comandos - looping ( FOR, WHILE, EXIT, WHEN).
• Gerenciamento de exceções.
• Aumenta a performance (operações processadas junto aos dados).
• Aumenta produtividade.
O PL/SQL oferece:
• Aumento de Performance
• Aumento de Produtividade
ORACLE RDBMS
Bloco PL/SQL Mecanismo
INSERT / UPDATE / DELETE Estes comandos são utilizados para entrar com
novas linhas, alterar as linhas já existentes e
remove-lás das tabelas em um específico
Banco de Dados. São também conhecidos
como comandos DML (Data Manipulation
Language).
1. Ativação do SQL*Plus
2. Criação de tabelas
3. Manipulação de tabelas
4. Formatação de relatórios
5. Edição de comandos
6. Outros comandos
$ sqlplus <ENTER>
SQL*Plus: Release 3.1.1.9.1 - Production on Wed Apr 3 08:56 …
Copyright (c) ORACLE Corporation 1979, 1992, All …
Enter user-name: oral1
Enter password: _________ a senha não é exibida
Connected to:
ORACLE7 Server Release 7.0.12.1.0 - Production
With the procedural option
PL/SQL Release 2.0.14.0.1 - Production
SQL>
ou a senha é exibida
$ sqlplus ora1/senha1
SQL*Plus: Release 3.1.1.9.1 - Production on Wed Apr 3 08:56 …
Copyright (c) ORACLE Corporation 1979,1992. All …
Connected to:
ORACLE7 Server Release 7.0.12.1.0 - Production
With the procedural option
PL/SQL Release 2.0.14.0.1 - Production
SQL>
SQL> exit
SQL> SELECT
2 *
3 FROM
4 emp
5;
SQL> SELECT *
2 FROM emp;
Campos
somente o cabeçalho
VALUES ( expr )
,
( column ) subquery_2
Onde:
Schema é o schema contendo a tabela ou visão. Se você
omitir o eschema, o Oracle assume a tabela ou visão
como seu próprio dono.
table, view é o nome da tabela no qual as linhas serão inseridas.
Se você especificar uma visão, o Oralce insere linhas
na tabela que a visão baseia-se.
Dblink é o nome completo ou parcial de um link de banco de
dados para um banco de dados remoto onde a tabela
ou visão está localizada. Se você omitir dblink, o
Oracle assume que a tabela ou visão está em um
banco de dados local.
Column é uma coluna da tabela ou visão. Na linha inserida,
cada coluna nesta lista está atribuída a um valor na
cláusula VALUES ou a subconsulta.
VALUES Especifica uma linha de valores a serem inseridos na
tabela ou visão.
subsquery_2 é uma sub-consulta que retorna linhas que são
inseridas na tabela. A lista selecionada desta
consulta tem que ter o mesmo número de colunas da
lista do comando INSERT.
Para você inserir linhas em uma tabela, a tabela tem que ser sua ou você
tem que ter privilégios sobre ela.
ou
É possível incluir uma nova linha com valores atribuídos para cada coluna,
neste caso os nomes das colunas podem ser omitidos. Recomenda-se que a lista
de colunas seja sempre especificada.
O exemplo a seguir insere uma linha com seis colunas na tabela EMP.
Uma dessas colunas está atribuída com valor nulo e outra está atribuída com
notação científica.
INSERT INTO emp (empno, ename, job, sal, comm, deptno)
VALUES (7890, ‘JINKS’, ‘CLERK’, 1.2E3, NULL, 40)
Exemplo:
SQL> INSERT INTO salgrade (losal, hisal, grade)
2 SELECT min(sal), max(sal), substr(sal, 1,1)
3 FROM emp
4 GROUP BY substr(sal, 1,1);
Para você atualizar linhas em uma tabela, a tabela tem que ser sua ou
você tem que ter privilégios sobre ela.
Sintaxe:
UPDATE
,
table
snapshot
( subquery_1 )
,
,
column = expr
( subquery_3 )
WHERE condição
DELETE table
( subquery )
WHERE condição
Onde:
schema é o schema contendo a tabela ou visão. Se você omitir o
schema, o Oracle assume a tabela ou visão como seu
próprio dono.
table, view é o nome da tabela no qual está sendo apagado as linhas.
Se você especificar uma visão, o Oralce apaga linhas da
tabela que a visão baseia-se.
dblink é o nome completo ou parcial de um link de banco de dados
com um banco de dados remoto onde a tabela ou visão está
localizada. Se você omitir o dblink o Oracle7 assume que a
tabela ou visão está localizada em um banco de dados
local.
subquery é uma sub-consulta no qual os dados são selecionados para
serem apagados. O Oracle executa uma subconsulta e usa
o resultado das linhas como uma tabela na cláusula FROM.
WHERE apaga somente linhas que satisfaçam a condição. A
condição pode referenciar a tabela e pode conter uma sub-
consulta.
Para você apagar linhas em uma tabela, a tabela tem que ser sua ou você
tem que ter privilégios sobre ela.
Observações:
Exemplos:
SQL> l
1 SELECT
2 empno, ename
3 FROM emp
4* WHERE empno = 7902
ou
SQL> list
1 SELECT
2 empno, ename
3 job,
4 sal
5* FROM emp;
ou
SQL> c/mgr/sal/
SQL> list
1 SELECT
2 empno, ename, sal,
3 job,
4 sal
5* FROM emp
ou
SQL> r
ou
SQL> /
ou
SQL> @arquivo
ou
SQL> ! Is - al
total 20
nome do comando
2. Insira dados sobre você e algum membro da sua família na tabela ALUNO.
1. Seleção de colunas
2. Uso de expressões
3. Ordenação de resultados
4. Agrupamento
5. Operações de conjunto
6. Junção de tabelas
SELECT *
,
DISTINCT
ALL table .*
schema. View
snapshot
expr
c_alias
AS
,
FROM table
snapshot
, INTERSECT
HAVING condição
,
ORDER BY expr
position ASC
c_alias DESC
ENAME EMPNO
SMITH 7369
ALLEN 7499
EMPNO ENAME
7369 SMITH
7499 ALLEN
SELECT 2*X+10
... WHERE X > Y / 2
SELECT 2 * X + 1
... WHERE X > Y - Z
ENAME 12*SAL
SMITH 9600
ALLEN 19200
WARD 15000
JONES 35700
MARTIN 15000
BLAKE 34200
CLARK 29400
SCOTT 36000
KING 60000
TURNER 18000
ADAMS 13200
JANES 11400
FORD 36000
MILLER 15600
sinônimo para a
coluna
SQL> SELECT
2 length (ename) +
3 length(job) “Comprimento Total”
4 FROM emp;
Comprimento Total
10
13
12
12
14
12
12
12
13
14
10
10
11
11
ENAME
SMITH
JONES
SCOTT
ADAMS
FORD
ENAME MESES
MARTIN 187.5371
NOT BETWEEN Validam uma expressão como sendo maior ou igual ao valor que
- AND segue BETWEEN e menor ou igual ao valor que segue AND.
NOT LIKE Este operador é usado para comparar duas strings de caracteres
e verificar se elas são parecidas.
• Podem ser utilizados caracteres % e _ . O caracter percentual
(%) é utilizado para comparar um ou mesmo nenhum
caracter, entretanto não pode comparar um valor nulo. O
caracter sublinhado (_) é utilizado para comparar exatamente
um caracter.
• Função UPPER: utilizada para fazer com que as expressões
sejam avaliadas corretamente comparando letras minúsculas
e maiúsculas.
IS NOT NULL Este operador deve ser usado quando for necessário testar uma
condição para verificar se ela é nula ou não.
(+) Indica que a coluna precedida pelo sinal (+) está relacionada à
coluna anterior da declaração e faz parte de outra tabela. Este
operador é utilizado para especificar os relacionamentos entre as
colunas.
Exemplo:
SELECT *
FROM emp
WHERE deptno = 30;
A cláusula GROUP BY pode ser usada para dividir as linhas de uma tabela
em pequenos grupos. Funções de grupos podem ser utilizadas para retornar uma
informação sumarizada de cada grupo.
DEPTNO COUNT(*)
10 3
20 5
30 6
selecione os grupos
(“where” de grupo) função de grupo
Tabela
Col. 1 Col. 2
A 1
B 1
D 2
(A,1)
elementos
(B,1) do
conjunto
(D,2)
Conjunto
• União (UNION)
• Intersecção (INTERSECT)
• Diferença (MINUS)
União
TABELAS
union
Col1 Col2
A 1
A 2
B 1
D 2
E 2
TABELAS
intersect
Col1 Col2
B 1
D 2
minus
Col1 Col2
A 1
A,
B, C X 1,2
(A,1), (A,2),
(B,1), (B,2),
(C,1), (C,2)
tab1 tab2
col1 col2 col3 col4 col5
A 3 B 2 E
ENAME DNAME
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING
especifica um tipo
de junção
III.16 - EXERCÍCIOS
4. Obtenha a soma dos salários dos empregados que não trabalham nos
departamentos 10 ou 30.
IV.1 - CONTEÚDO
2. Junção externa
3. Auto-Junção
4. Consultas encaixadas
5. Consultas hierárquicas
IV.2 - PSEUDO-COLUNAS
ROWNUM ROWID
1 00000984.0001.0001
• Agrupar tabelas.
Para saber quais empregados ganham mais que a média dos salários:
DEPTNO DNAME
40 OPERATONS
75 / PRESIDENTE
LEVEL NOME
1 KING
IV.7 - EXERCÍCIOS
V.1 - SQL*PLUS
• Formatar resultados.
• Configurar o ambiente.
SQL>
2. SQLPLUS nome_do_usuário
3. SQLPLUS nome_do_usuário/senha
Para cancelar a exibição dos títulos basta entrar com TTITLE OFF ou
BTITLE OFF.
Empregados da B A C
Exemplo:
SHOW PAGESIZE
Quando criar uma tabela, você deve especificar os tipos das colunas. Os
mais utilizados são:
DATE São valores tipo data. Ex.: December 31, 4712 BC. Usa 7
bytes.
NULL Esta opção define que a coluna pode possuir valores nulos.
Esta opção é default e pode ser omitida.
NOT NULL Esta opção assegura que a coluna sempre tenha valores
diferentes de nulo. Se tentar incluir uma linha com a coluna
que tem essa opção sem valor, o ORACLE enviará uma
mensagem de erro.
Uma constraint pode ser definida para tabelas e colunas e são definidas no
comando CREATE ou ALTER TABLE.
FOREIGN KEY ( coluna ...)/ Identifica que essa é uma chave estrangeira da tabela
REFERENCES do usuário definida. Deve sempre estar referenciada a
usuário.tabela(colunas) uma tabela e não a uma visão.
Sintaxe:
( coluna tipo )
table_constraint
AS subquery
Onde:
Schema É o schema contendo a tabela. Se você
omitir o schema, o Oracle cria a tabela como
seu próprio dono.
Table É o nome da tabela a ser criada.
Coluna Especifica o nome de uma coluna da tabela.
Uma tabela não pode ter mais do que 254
colunas.
Tipo É o tipo da coluna.
Default Especifica um valor a ser atribuído para a
coluna se um comando INSERT
subsequente for omitido para o valor da
coluna. O tipo da expressão tem que ser o
mesmo tipo da coluna.
Column_constraint Define uma integridade de constraint como
parte da definição da coluna.
Table_constraint Define uma integridade de constraint como
parte da definição da tabela.
As subquery Insere as linhas retornadas por uma
subconsulta na tabela que será criada.
Criando a tabela DEPT.
DESCRIBE EMP;
Table created.
• Exemplo:
DNAME Media_Salario
ACCOUNTING 2916.6667
RESEARCH 2175
SALES 1566.6667
O parâmetro ADD deve ser utilizado para adicionar uma coluna e/ou
constraint para uma tabela existente.
ADD ( column_datatype )
DEFAULT exp column_constraint
table_constraint
,
MODIFY ( column )
datatype DEFAULT expr column_contraint
Onde:
Table é o nome da tabela a ser alterada.
ADD adiciona uma coluna ou integridade de
constraint.
MODIFY modifica a definição de uma coluna existente.
Column é o nome da coluna a ser alterada ou
modificada.
Datatype especifica um tipo para a coluna ou um novo
tipo para uma coluna existente.
DEFAULT especifica um valor default para uma nova
coluna ou um novo valor default para uma
coluna existente. O Oracle assume esse
valor para a coluna se um comando INSERT
subsequence omitir um valor para a coluna.
O tipo de um valor default tem que ser igual
ao tipo especificado para a coluna. A
expressão DEFAULT não pode conter
referências a outras colunas.
Column_constraint adiciona ou remove uma constraint NOT
NULL para ou de uma coluna existente.
Table_constraint adiciona uma integridade de constraint para
a tabela.
O comando abaixo adiciona a coluna NOME_DA_ESPOSA na tabela EMP.
Sintaxe:
Onde:
Eliminando um comentário:
Tabela Emp
EMPNO ENAME …DEPTNO
7369 SMITH …20
7499 ALLEN …30
7521 WARD …30
7566 JONES …20
7654 MARTIN …30
7698 BLAKE …30
7782 CLARK …10
7788 SCOTT …20
7839 KING …10
7844 TURNER …30
7876 ADAMS …20
7900 JAMES …30
7902 FORD …20
7934 MILLER …10
Visão Emp_10
EMPNO ENAME …DEPTNO
7521 WARD …30
7782 CLARK …10
Emp
EMPNO ENAME …DEPTNO Dept
7369 SMITH …20 DEPTNO DNAME
7499 ALLEN …30 10 ACCOUNTING
7521 WARD …30 20 RESEARCH
7566 JONES …20 30 SALES
7654 MARTIN …30 40 OPERATIONS
7698 BLAKE …30
7782 CLARK …10
7788 SCOTT …20
7839 KING …10
7844 TURNER …30
7876 ADAMS …20
7900 JAMES …30
7902 FORD …20
7934 MILLER …10
indicações para
dep. 20 apenas,
por motivo de
clareza
Uma VIEW é como uma janela, através da qual os dados nas tabelas
podem ser consultados e alterados.
NO FORCE
AS subquery
( alias )
WITH
READ ONLY
CHECK OPTION
CONSTRAINT constraint
Onde:
• Condição de JOIN
• A cláusula GROUP BY
• O comando DISTINCT
• O parâmetro ROWNUM
INCREMENT BY integer
MAXVALUE integer
NOMAXVALUE
MINVALUE integer
NOMINVALUE
CYCLE
NOCYCLE
CACHE integer
NOCACHE
ORDER
NOORDER
Onde:
Para usá-la:
Após criar uma seqüência, esta pode ser utilizada para gerar um número
sequencial único.
SELECT DEPT_SEQ.NEXTVAL
FROM SYS.DUAL;
• Não podem ser utilizados com as cláusulas ORDER BY, GROUP BY,
CONNECT BY ou HAVING do comando SELECT.
INCREMENT BY integer
MAXVALUE integer
NOMAXVALUE
MINVALUE integer
NOMINVALUE
CYCLE
NOCYCLE
CACHE integer
NOCACHE
ORDER
NOORDER
Tipos de Índices:
Sintaxe:
ON table ( column )
schema. ASC
DESC
Onde:
SELECT *
FROM emp
WHERE ename = ‘SMITH’;
• Em uma tabela com mais de 200 linhas, o uso do índice pode melhorar
a performance.
• Não faça mais que três índices por tabela pois poderá acarretar uma
utilização maior de recursos para cada execução de um comando
DML.
8. Crie uma visão chamada DEP_SAL baseada nas tabelas EMP e DEPT,
contendo as seguintes informações:
DICA: Primeiro faça uma consulta que reforma os dados acima, para depois
criar uma visão baseada nessa consulta.
• Função ABS
Retorna o valor absoluto do número.
ABS (numero)
• Função FLOOR
Retorna o menor inteiro maior ou igual à expressão.
FLOOR(expr)
• Função CEIL
Retorna o maior inteiro menor ou igual à expressão.
CEIL(expr)
• Função MOD
Retorna o resto da divisão do primeiro pelo segundo número.
MOD(numero1, numero2)
POWER(numero1,numero2)
• Função ROUND
Retorna o valor do primeiro número arredondado para o segundo número de
casas a direita do ponto decimal. Se o segundo número for omitido, arredonda o
primeiro número sem casas decimais. O segundo número pode assumir valores
negativos, sendo que nesse caso o primeiro número será arredondado à esquerda
do ponto decimal. O segundo número deve ser um inteiro.
ROUND(numero1,numero2)
• Função SIGN
Retorna o sinal do número. Caso o número seja negativo, retornará -1. Se o
número for 0 retornará 0 e se for maior que 0, a função retorna 1.
SIGN(numero)
• Função SQRT
Retorna a raiz quadrada do número. No caso do número ser negativo, a
função SQRT retornará um valor nulo. Nas outras vezes, retornará sempre um
resultado real.
SQRT(numero)
TRUNC(numero1,numero2)
• Função ASCII
Retorna o valor ASCII do primeiro caracter da string char. Não existe uma
função correspondente EBCDIC. Assim, nesses sistemas, esta função retorna o
valor EBCDIC do primeiro caracter da string char.
ASCII(CHAR)
• Função CHR
Retorna o caracter que corresponde ao valor ASCII ou EBCDIC especificado
pelo número, dependendo do tipo de caracteres com os quais o computador
trabalha.
CHR(numero)
• Função INITICAP
Retorna a string de caracteres char com as primeiras letras de cada uma das
palavras que forma em maiúscula e todas as outras em minúsculas. As palavras são
delimitadas por espaços.
INITICAP(CHAR)
INSTR(CHAR1,CHAR2,NUM1,NUM2)
• Função LENGTH
Retorna o tamanho da string.
LENGTH(CHAR)
SELECT LENGTH(‘REPUBLICA’)
“LENGHT” FROM DUAL;
• Função LOWER
Transforma todos os caracteres da string char em letras minúsculas.
LOWER(CHAR)
• Função LPAD
Insere os caracteres de char2 no início da string char1 e os repete até que a
string char1 fique com um tamanho em caracteres especificado por num.
LPAD(CHAR1,NUM,CHAR2)
LTRIM(CHAR1,CHAR2)
SELECT LTRIM(‘xxxXxxxLTRIM’,’x’)
“LTRIM” FROM DUAL;
•Função RTRIM
Remove todos os caracteres à direita de char1 que sejam iguais aos
caracteres especificados em char2, até que um dos caracteres de char1 seja
diferente. Esta função é semelhante à função LTRIM.
RTRIM(CHAR1,CHAR2)
SELECT RTRIM(‘LEVELxxXxxxx’,’x’)
“RTRIM” FROM DUAL;
• Função RPAD
Inclui char2 no final da string de caracteres char1 até que char1 fique com o
tamanho em caracteres especificado por num.
RPAD(CHAR1,NUM,CHAR2)
SELECT RPAD(‘RAZAO’,10,’x’)
“RPAD” FROM DUAL;
SUBSTR(CHAR,NUM1,NUM2)
SELECT SUBSTR(‘ABCDEFG’,2,3)
“SUBSTR” FROM DUAL;
• Função UPPER
Transforma a string de caracteres char em letras maiúsculas.
UPPER(CHAR)
• Função SOUNDEX
Retorna um conjunto de caracteres que representa o som da palavra. Esta
função retorna a representação fonética para cada palavra permitindo assim
comparações entre palavras de escrita diferentes mas com o mesmo som.
Nome SOUNDEX(nome)
MILLER M460
A função TRANSLATE pode ser usada para pesquisas com a utilização dos
caracteres _ e % da maneira exemplificada abaixo. Neste exemplo, a função
TRANSLATE converte o caracter _ para o caracter # com o propósito de avaliar uma
pesquisa e a declaração retorna todas as linhas que possuírem o caracter # na
coluna ENAME da tabela EMP.
SELECT ename
FROM emp
WHERE TRANSLATE(ENAME,’_’,’#’) LIKE ‘%#%’
• Função REPLACE
Como a função TRANSLATE, esta função é utilizada para substituir
caracteres.
REPLACE (coluna/valor,string,string_substituto)
• Função AVG
Retorna a média de número, ignorando os valores nulos.
SELECT AVG(SAL)
“AVG” FROM emp;
• Função COUNT
Retorna o número de linhas especificadas para todos os valores da
expressão expr que não sejam nulos.
SELECT COUNT(JOB)
“COUNT(EXPR)2” FROM emp;
• Função COUNT(*)
Retorna o número de linhas de uma tabela, incluindo as linhas duplicadas ou
que contenham valores nulos.
COUNT(*)
SELECT COUNT(*)
“COUNT(*)” FROM emp;
• Função MAX
SELECT MAX(SAL)
“MAX” FROM DUAL;
• Função MIN
Retorna o valor mínimo da expressão expr.
SELECT min(hiredate)
FROM emp;
• Função SUM
Retorna a soma dos valores de num.
SELECT sum(sal)
“SUM” FROM emp;
• Função TO_CHAR
Converte um valor do tipo NUMBER ou DATE para uma string de caracteres
formatada segundo a caracterização especificada em formato, opcionalmente. Os
formatos são discutidos mais tarde neste capítulo. Se o formato for omitido, num é
convertido para uma string de caracteres do mesmo tamanho dos números
significativos de num, se for número.
• Função TO_DATE
Converte uma string de caracteres especificando uma data em um valor do
tipo DATE. A data do dia é usada para providenciar informações adicionais na
conversão de caracteres para data.
TO_DATE(CHAR, FORMATO)
• Função TO_NUMBER
Converte a string de caracteres char, contendo um número, para o tipo de
dados NUMBER.
TO_NUMBER(CHAR)
UPDATE emp
SET SAL = SAL + TO_NUMBER(‘250’);
FORMATOS:
SYEAR ou YEAR Ano por extenso, o prefixo S substitui data AC por ‘-’.
Q Trimestre.
MM Mês.
J Data Juliana.
AM ou PM Indicador Meridiano.
MI Minutos.
SS Segundos.
DECODE (coluna/expressão,
escolha1, resultado1, escolha2, resultado2, ..., default )
• Função GREATEST
Retorna a maior lista dos valores entrados.
GREATEST (coluna/valor1,coluna/valor2,...)
• Função LEAST
Retorna o menor valor da lista de valores.
LEAST (coluna/valor1,coluna/valor2,...)
• Função VSIZE
Retorna o número de bytes na representação interna do Oracle.
VSIZE (coluna/valor)
As funções data são utilizadas para operar com os tipos de dados DATE
do ORACLE. Sempre retornam um valor do tipo DATE, exceto a função
MONTHS_BETWEEN que retorna um valor numérico.
• Função ADD_MONTHS
Retorna a data dat adicionada de num meses. Se o número num for
negativo, os meses serão subtraídos. O número num sempre deve ser um inteiro.
ADD_MONTHS(DAT,NUM)
• Função NEXT_DAY
NEXT_DAY(dat1,char1)
• Função LAST_DAY
Retorna a data do último dia do mês da data dat1.
LAST_DAY(dat1)
• Função ROUND
ROUND (dat1,’MONTH’/’YEAR’)
• Função TRUNC
Retorna o primeiro dia do mês da data referente se utilizado com o parâmetro
MONTH. Se utilizado com o parâmetro YEAR, retornará o primeiro dia do ano da
data referente.
TRUNC(dat1,’MONTH’/’YEAR’)
• Função MONTHS_BETWEEN
Retorna o número de meses entre as datas dat1 e dat2. Se dat1 for posterior
a dat2, o valor retornado é positivo. Se dat2 for maior que dat1, então o valor
retornado é negativo.
MONTHS_BETWEEN (DAT1,DAT2)
SELECT MONTHS_BETWEEN(‘02-FEB-86’,’01-JAN-86’)
“MONTHS_BETWEEN” FROM DUAL;
SYSDATE
Por exemplo, para transferir uma certa quantia em dinheiro de uma conta A
para uma conta B, devemos:
Exemplo:
DEPTNO DNAME
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS o próprio usuário vê os dados, mas
50 MARKETING eles ainda não foram efetivados
60 INFORMÁTICA
fim da transação, com
efetivação dos dados
SQL> commit;
Commit compete.
DEPTNO
COMERCIAL fim da transação; as
atualizações foram
descartadas
SQL> rollback;
Rollback complete.
SQL> SELECT deptno FROM dept WHERE deptno = 30;
DNAME produzem
o mesmo
SALES efeito
Observação:
SQL> SELECT sal FROM emp SQL> SELECT sal from emp
2 WHERE empno = 7369; 2 WHERE empno = 7369;
SAL SAL
800 800
SQL> UPDATE emp SQL>
2 SET sal = 4000
3 WHERE empno = 7369;
SQL> SELECT sal from emp SQL> SELECT sal FROM emp
2 WHERE empno = 7369; 2 WHERE empno = 7369;
SAL SAL
4000 800
SQL> SELECT sal FROM emp SQL> SELECT sal FROM emp
2 WHERE empno = 7369; 2 WHERE empno = 7369;
SAL SAL
4000 4000
O comando SET AUTOCOMMIT ON do SQL*Plus faz com que o commit
seja executado automaticamente a cada comando de manipulação de dados:
SQL>set feedback on
SQL> set autocommit on
SQL> delete from dept = 10;
Commit deleted.
1 record deleted.
1 record created.
1 record deleted.
SQL> rollback;
Rollback complete.
SAL
3000
SAL
3000
Transações são as operações que ocorrem em uma ou mais tabelas. São
iniciadas com o primeiro comando DML ou após o início de uma sessão. As
transações terminam após um comando DDL, após um COMMIT ou ROLLBACK,
após o encerramento da sessão com o servidor ou após uma falha de hardware
(deadlocks).
COMMIT ou ROLLBACK
O comando COMMIT
COMMIT WORK;
• Termina a transação.
SAVEPOINT nome;
• Finalizar a transação
SET AUTOCOMMIT OFF O comando COMMIT tem que ser executado pelo
usuário ou será executado após os comandos DDL.
SELECT - -
INSERT X RX
UPDATE X RX
DELETE X RX
DDL - X
SELECT FOR UPDATE X RS
LOCK TABLE IN
EXCLUSIVE - X
SHARE UPDATE - RS
ROW SHARE - RS
SHARE ROW EXCLUSIVE - SRX
ROW EXCLUSIVE - RX
SHARE - S
Alguns Locks são mais restritivos que outros. A maioria dos Locks está
entre os Locks de Compartilhamento (Share Locks) e os Locks de exclusividade
(Exclusive Lock).
Exclusive Lock - Pode ser executado por um único usuário de cada vez.
O primeiro usuário a executar o Lock ganha o direito exclusivo de atualizar a tabela,
até que o Exclusive Lock for desabilitado.
DEADLOCKS
00004C90.0001.0001
Obs:
Opções:
GRANT privilégios
ON objeto
TO usuário;
Lista de Privilégios:
Observações:
REVOKE privilégios
ON tabela ou visões
FROM usuários;
REVOKE ALL
ON dept
FROM joao;
SELECT *
FROM scott.emp;
DECLARE
.... declaracoes
BEGIN
.... sentenças
EXCEPTION
.... manusear excessoes
END;
DECLARE
... definição dos objetos PL/SQL que serão utilizados neste bloco
BEGIN
.... ações executáveis
EXCEPTION
.... o que fazer se um ação executada causar um erro
END;
ELSE
END IF;
COMMIT;
EXCEPTION
END;
Atribuição de Valores
identificador := expressão;
contador := contador + 1;
salario_anual := salario * 13 + NVL(comissao,0);
nivel := 6;
cargo := ‘JOGADOR’;
data_de_hoje := SYSDATE;
• Sentenças IF
• Sentenças GO TO
• Repetições (LOOPs)
• EXIT
IF condicao THEN
acoes
ELSIF condicao THEN
acao
ELSE
acao
END IF;
Exemplo:
declare
v_sal number(10,2);
v_ename varchar2(20);
begin
select ename,sal into v_ename,v_sal from emp
where empno = 7369;
if v_sal < 5000 then
dbms_output.put_line('O '||v_ename||' recebe um salário razoável !!!');
elsif v_sal = 5000 then
dbms_output.put_line('O '||v_ename||' recebe um bom salário!!!');
else
dbms_output.put_line('O '||v_ename||' recebe um salário ótimo !!!');
end if;
end;
declare
x number;
begin
for x in 1..10
loop
dbms_output.put_line(x);
end loop;
end;
WHILE condicao
declare
x number := 0;
begin
while x < 10
loop
dbms_output.put_line(x);
x := x + 1;
end loop;
end;
identificador tabela_de_referencia.campo%TYPE;
DECLARE
v_ename emp.ename%TYPE;
BEGIN
SELECT ename INTO v_ename FROM emp WHERE empno = 1234;
...
END;
identificador tabela_de_referencia%ROWTYPE;
DECLARE
reg_fun emp%ROWTYPE;
BEGIN
SELECT * INTO reg_fun FROM emp WHERE num_func = 1234;
...
END;
O Oracle utiliza uma área de trabalho chamada ‘Private SQL Area’ (Área
Privativa do SQL) para executar comandos SQL e armazenar informações
de processamento. Um cursor é uma construção PL/SQL que permite dar
nomes a essas áreas de trabalho e acessar as informações armazenadas
nela.
DECLARE
CURSOR C1 IS
SELECT ename, sal, hiredate
FROM emp
WHERE deptno = 20
AND job = ‘ANALYST’;
O comando OPEN
OPEN C1;
O comando FETCH
O comando CLOSE
CLOSE C1;
DECLARE
CURSOR C1 IS
SELECT empno, sal, hiredate, rowid
FROM emp
WHERE deptno = 20
AND job = ‘ANALYST’
FOR UPDATE OF sal;
registro_emp c1%ROWTYPE;
BEGIN
OPEN C1;
....
FETCH C1 INTO registro_emp;
...
IF registro_emp.sal < 2000 THEN ...
DECLARE
CURSOR nome_do_cursor ( parametros ) IS sentença_de_pesquisa;
BEGIN
FOR nome_do_registro IN nome_do_Cursor ( parametros )
LOOP
...
END LOOP;
DECLARE
CURSOR C1 IS
SELECT n1, n2, n3
FROM tabela;
resultado NUMBER;
BEGIN
FOR rec IN C1
LOOP
resultado := rec.n2 / ( rec.n1 + rec.n3);
INSERT INTO tabela_tmp VALUES ( resultado );
END LOOP;
COMMIT;
END;
Não confunda procedures de banco de dados com Oracle Forms, PL/SQL e rotinas
built-in.
Código Fonte
Compilação
Código compilado
Execução
Sintaxe:
Criando Funções
Para criar uma função ou procedure dependerá de que forma será chamada e de
que forma espera-se os valores.
Criar uma nova função com o comando CREATE FUNCTION, a qual declara uma
lista de argumentos, declara o argumento que irá retornar e define as ações que
serão realizadas utilizando blocos PL/SQL.
Sintaxe:
RAISE_APPLICATION_ERROR(numero_erro, texto_erro)
DROP PROCEDURE/FUNCTION
DECLARE
v_empno NUMBER := 7654;
BEGIN
...
exclui_funcionario (v_empno);
...
END;
Para entrar com valores via SQL*Plus deve-se utilizar o comando ACCEPT e
substituir o parâmetro de entrada da procedure pela variável do ACCEPT iniciado
pela string &.
Para uma procedure que contenha vários argumentos, existe três métodos
para especificar seus valores :
As maneiras de executar uma função são as mesmas utilizadas para executar uma
procedure. Mas lembre-se que uma função retorna um único valor.
DECLARE
v_empno NUMBER := 7654;
v_sal NUMBER;
BEGIN
...
v_sal := pesquisa_salario(v_emp_no);
...
END;
PRINT g_sal
void exec_pesquisa_salario ()
(
EXEC SQL BEGIN DECLARE SECTION;
int empno;
float sal;
EXEC SQL END DECLARE SECTION;
printf (“\nEntre com o numero do funcionario : “);
scanf (“%d”, &empno);
EXEC SQL EXECUTE;
begin
:sal := pesquisa_salario(:empno);
end;
EXEC SQL END-EXEC;
printf (“\nO salario e : %7.2f”, sal);
return;
)
Melhorar performance
Conservar a memória
Melhorar manutenções
Para permitir que os usuários possam executar uma procedure ou função, deve ser
alterado o privilégio de segurança.
Coluna Descrição
OBJECT_NAME Nome do objeto
OBJECT_ID Identificador interno do objeto
OBJECT_TYPE Tipo do objeto (PROCEDURE, FUNCTION, PACKAGE
ou PACKAGE BODY)
CREATED Data da criação do objeto
LAST_DDL_TIME Data de modificação do objeto
Coluna Descrição
SELECT text
FROM user_source
WHERE type = ‘PROCEDURE’
Coluna Descrição
• Prepare a procedure
• Teste a procedure
Controle de Segurança
Provendo acesso a outro usuário diferente do propietário (Luiz). Este acesso deve
ser disponibilizado pelo proprietário.
Tarefa Estratégia
Procedure View
Tabela
INVALID INVALID
Procedure Procedure
Alterações na
definição
INVALID INVALID
Dependência remota
Coluna Descrição
NAME Nome do objeto dependente
Coluna Descrição
Para recompilar uma procedure o usuário deve ser dono da procedure ou ter o
privilégio ALTER ANY PROCEDURE.
Note que uma alteração de segurança também marca objetos dependentes como
inválidos.
• VALID indica que o objeto foi compilado com sucesso e está pronto
para ser executado.
3. Se a procedure local, que está marcada como INVALID, é chamada pela segunda
vez, o Oracle recompilará a procedure antes de executá-la de acordo com o
mecanismo de dependência local automático.
• Assumindo qua não há outros erros de compilação, o Oracle insere o
novo timestamp no código objeto da procedure local e executa-a.
PACKAGE
Variáveis Cursor
Constante Excessões
PROCEDURE FUNÇÃO
Construção Descrição
PACKAGE
Variável
Pública
Procedure A Procedure
Declaração Pública
Especificação PACKAGE
Variável
Privada
Procedure B Procedure
Definição Privada
Procedure A Procedure
Definição Pública
Variável
Local Corpo do Package
Desenvolvendo um Package
1. Escreva o texto do comando CREATE PACKAGE dentro de um arquivo texto
para criar a especificação do package.
Criando PACKAGES
Sintaxe:
PROCEDURE reset_comm_rate
(v_comm_rate IN NUMBER);
Sintaxe :
Exemplo :
Tarefa Comando
Criar uma nova especificação de package CREATE PACKAGE
Executando Packages
Depois de armazenar o package no banco de dados, chame a construção do
package de dentro de um package ou de fora do package, dependendo se a
construção for privada ou pública.
O estado de uma variável package ou cursor persiste através das transações dentro
da sessão. Mas não persiste de uma sessão para outra ou de um usuário para
outro.
Tarefa Estratégia
Obter documentação Exibir as visões do dicionário de dados
USER_OBJECTS e USER_SOURCE
Tarefa Descrição
Sintaxe :
Sintaxe :
Sintaxe :
Package Funcionalidade
Exemplos:
DBMS_OUTPUT.PUT_LINE (v_debug_flag);
DBMS_DDL.ALTER_COMPILE (v_dependet_procedure);
DBMS_SESSION.SET_ROLE (v_new_role);
DBMS_PIPE.PACK_MESSAGE(v_info);
v_status := DBMS_PIPE.SEND_MESSAGE(‘info_pipe’);
v_status := DBMS_PIPE.RECEIVE_MESSAGE(‘info_pipe’);
IF v_status = 0 then
DBMS_PIPE.PACK_MESSAGE (v_info);
END IF;
Benefícios do package
Melhorar performance.
Aplicação
BEFORE
INSERT
row
BANCO DE DADOS
Decida qual momento e em qual evento o trigger deve ser executado antes de
codificá-lo.
Tabela DEPT
Sintaxe:
onde,
Exemplo :
Sintaxe :
onde,
Exemplo:
Exemplo :
Exemplo :
Note que os dois pontos dos qualificadores old e new não são utilizados na
cláusula WHEN.
Tarefa Comando
Sintaxe:
ou
Tarefas Triggers
Coluna Descrição
TRIGGER_NAME O nome da trigger
TRIGGER_TYPE O momento em o trigger será executado (
BEFORE/AFTER )
TRIGGERING_EVENT O comando de manipulação de dado que causa a
execução do trigger ( INSERT, UPDATE ou DELETE )
TABLE_OWNER O dono da tabela associada ao trigger
TABLE_NAME Nome da table associada ao trigger
WHEN Condição de restrição
STATUS Disponibilidade do trigger ( ENABLED/DISABLED )
TRIGGER_BODY Texto do bloco PL/SQL
Exemplo:
Exemplo:
Exemplo:
Exemplo:
• Remoção em cascata
Exemplo:
• Atualização em cascata
Exemplo:
Exemplo:
Exemplo:
OBJETIVOS: 187
5. SAVE EX24.SQL
2. SAVE EX31.SQL
IV - CONSULTAS AVANÇADAS
6. ROLLBACK;
VI - ESTRUTURA DE DADOS
9. DESC DEP_SAL
11. ROLLBACK;