Escolar Documentos
Profissional Documentos
Cultura Documentos
Locadora de Veiculos
Tabela Pessoa Fisica
Clausula Select:
Begin
Select Nome, Cpf, Rg, Chassi, Placa, dataDevolucao, valorTotal
From Devolucao
Inner Join PessoaFisica ON
(PessoaFisica.idPessoaFisica=Devolucao.idPessoaFisica)
Inner join Veiculo ON (veiculo.idVeiculo=Devolucao.idVeiculo)
Order By PessoaFisica.Nome;
End;
Clausula Insert:
Clausula Update:
Update PessoaFisica Set Passaporte='10105522', Cel='1163085131'
where idPessoaFisica = 2;
Clausula Delete:
Begin
delete PessoaFisica where idPessoaFisica=3;
End;
Indice Clusterizado:
Create CLUSTERED Index IDX_PessoaFisica_Cnh
ON PessoaFisica(ValidadeCnh);
Tabela Veiculo
Tabela Locação
Tabela Devolução
PLSQL
A PLSQL é uma linguagem estrutural estendida da SQL que tem por objetivo auxiliar as
tarefas de programação no Oracle. Ela incorpora à SQL características procedurais, como
os benefícios e facilidades de controle de fluxo de programas que as melhores linguagens
possuem. Por exemplo loops estruturados (for, while) e controle de decisão (if then else).
PL/SQL significa "Procedural Language extensions to SQL", que pode ser usado em
bancos de dados. O PL/SQL é a linguagem SQL com construções de programação similares
a outras liguagens, principalmente com a linguagem Pascal.
Constantes:
Delimitadores
Seções de um bloco
Cabeçalho (Header)
determina o modo como o bloco deve ser chamado
Seção de Declaração
onde declaramos variáveis, cursores e sub-blocos e
seções de exceção
Seção de Execução
parte que contém o código a ser executado
Seção de Exceções (Exceptions)
manipula exceções ao processamento normal
(condições de aviso e erro).
Seções de um Bloco
Cabeçalho
IS
Seção de declaração
Begin
Seção de execução
Exception
Seção de exceptions
End;
Seções de um Bloco
Blocos Anônimos
Declare
Seção de declaração
Begin
Seção de execução
Exception
Seção de exceptions
End;
Exemplo:
DECLARE
pi CONSTANT NUMBER(9,7) := 3.1415927;
...
BEGIN
...
END;
Exemplo 1 IF Else:
DECLARE
V_1 NUMBER(2) := 4;
V_2 VARCHAR2(5);
BEGIN
IF MOD(V_1,2) = 0
THEN V_2 := 'PAR';
ELSE V_2 := 'IMPAR';
END IF;
DBMS_OUTPUT.PUT_LINE ('O número é: ' || V_2);
END;
Exemplo 2 IF Else:
DECLARE
V_RA ALUNO.RA%TYPE := 1;
V_NOTA ALUNO.NOTA%TYPE;
V_CONCEITO VARCHAR2(12);
BEGIN
SELECT NOTA
INTO V_NOTA
FROM ALUNO
WHERE RA = V_RA;
IF V_NOTA <= 5
THEN V_CONCEITO := 'REGULAR';
ELSE IF V_NOTA < 7
THEN V_CONCEITO := 'BOM';
ELSE V_CONCEITO := 'EXCELENTE';
END IF;
DBMS_OUTPUT.PUT_LINE ('Conceito: ' || V_CONCEITO);
END;
Exemplo Case:
DECLARE
V_RA ALUNO.RA%TYPE := 1;
V_NOTA ALUNO.NOTA%TYPE;
V_CONCEITO VARCHAR2(12);
BEGIN
SELECT NOTA
INTO V_NOTA
FROM ALUNO
WHERE RA = V_RA;
V_CONCEITO :=
CASE
WHEN V_NOTA <= 5 THEN 'REGULAR'
WHEN V_NOTA < 7 THEN 'BOM'
ELSE 'EXCELENTE'
END;
DBMS_OUTPUT.PUT_LINE ('Conceito: ' || V_CONCEITO);
END;
Exemplo 1:
DECLARE
V_AUX NUMBER(2) := 0;
BEGIN
FOR V_CONTADOR IN 1..10
LOOP
V_AUX := V_AUX +1;
DBMS_OUTPUT.PUT_LINE (V_AUX);
END LOOP;
END;
Exemplo 2:
DECLARE
V_RA_INICIAL ALUNO.RA%TYPE := 1;
V_RA_FINAL V_RA_INICIAL%TYPE;
V_AUX V_RA_INICIAL%TYPE := 0;
BEGIN
SELECT COUNT(RA)
INTO V_RA_FINAL
FROM ALUNO;
FOR V_CONTADOR IN V_RA_INICIAL..V_RA_FINAL
LOOP
V_AUX := V_AUX +1;
DBMS_OUTPUT.PUT_LINE ('Total de alunos: ' || V_AUX);
END LOOP;
END;
While
Exemplo 1:
DECLARE
V_RA_INICIAL ALUNO.RA%TYPE := 1;
V_RA_FINAL V_RA_INICIAL%TYPE;
V_AUX V_RA_INICIAL%TYPE := 0;
BEGIN
SELECT COUNT(RA)
INTO V_RA_FINAL
FROM ALUNO;
FOR V_CONTADOR IN V_RA_INICIAL..V_RA_FINAL
LOOP
V_AUX := V_AUX +1;
DBMS_OUTPUT.PUT_LINE ('Total de alunos: ' || V_AUX);
END LOOP;
END;
Exemplo 2:
DECLARE
V_RA_FINAL ALUNO.RA%TYPE := 1;
V_AUX V_RA_FINAL%TYPE := 0;
BEGIN
SELECT COUNT(RA)
INTO V_RA_FINAL
FROM ALUNO;
WHILE V_AUX < V_RA_FINAL
LOOP
V_AUX := V_AUX +1;
DBMS_OUTPUT.PUT_LINE ('Total de alunos: ' || V_AUX);
END LOOP;
END;
EXIT:
Exemplo 1:
DECLARE
V_AUX NUMBER(2) := 0;
BEGIN
FOR V_CONTADOR IN 1..15
LOOP
V_AUX := V_AUX +1;
DBMS_OUTPUT.PUT_LINE (V_AUX);
EXIT WHEN V_CONTADOR = 10;
END LOOP;
END;
Exemplo 2:
DECLARE
V_AUX NUMBER(2) := 0;
BEGIN
FOR V_CONTADOR IN 1..15
LOOP
V_AUX := V_AUX +1;
DBMS_OUTPUT.PUT_LINE (V_AUX);
IF V_CONTADOR = 10
THEN EXIT;
END IF;
END LOOP;
END;
LOOP
Executa uma relação de comandos até que uma instrução de saída (EXIT) seja
encontrada.
Exemplo:
DECLARE
V_AUX NUMBER(2) := 0;
BEGIN
LOOP
V_AUX := V_AUX +1;
DBMS_OUTPUT.PUT_LINE (V_AUX);
IF V_AUX = 10
THEN EXIT;
END IF;
END LOOP;
END;
View
Uma view é uma maneira alternativa de observação de dados de uma ou
mais entidades (tabelas), que compõem uma base de dados. Pode ser considerada
como uma tabela virtual ou uma consulta armazenada. Geralmente e recomendável,
uma view, implementada encapsulando uma instrução SELECT (busca de dados para
exposição), guarda os dados em uma tabela virtual, armazenando também em cache,
pois todas as consultas ao banco, encapsuladas ou não, ao serem executadas, são
armazenadas em cache. Por este motivo, pode ser mais rápido ter uma consulta
armazenada em forma de view, em vez de ter que retrabalhar uma instrução.
As views nos possibilitam mais que simplesmente visualizar dados. Elas podem ser
implementadas também com algumas aplicações de restrição:
Seleciona quatro campos da junção entre três tabelas de acordo com a chave e demonstra
em uma view:
Procedure
Definição de Procedure: Sub-rotina que processa informações e não retorna valor,
Procedure ou Procedimento é um trecho de código separado para executar uma
determinada tarefa, um determinado comportamento, e após a sua execução deve
retornar uma linha imediatamente abaixo de onde esta procedure foi invocada.
Procedure para pesquisar informações sobre o aluno de acordo com o seu Ra ( Parâmetro
informado @ra (Select)):
Exemplos:
Como o problema requer o retorno de datas em intervalos de minutos, vamos criar uma
tabela em nossa função com um campo do tipo DATETIME, utilizando a função built-in
(função interna do SQL Server) DATEADD() para incrementar uma data inicial até a data
final desejada em intervalos de minutos = MINUTE.
Triggers
Gatilho ou trigger é um recurso de programação executado sempre que o evento
associado ocorrer. Trigger é um tipo especial de procedimento armazenado, que é
executado sempre que há uma tentativa de modificar os dados de uma tabela que é
protegida por ele.
É muito utilizada para ajudar a manter a consistência dos dados ou para propagar
alterações em um determinado dado de uma tabela para outras. Um bom exemplo é um
gatilho criado para controle de quem alterou a tabela, nesse caso, quando a alteração for
efetuada, o gatilho é "disparado" e grava em uma tabela de histórico de alteração, o
usuário e data/hora da alteração.
Em SQL, um gatilho típico é composto de três componentes, que seguem o Modelo
evento - condição - ação
Índices
Como tal, muitas vezes é preferível criar índices nas tabelas. Um índice pode abranger
uma ou mais colunas. A sintaxe geral para criar um índice é:
DBCC CHECKALLOC
GO
Indice Clusterizado:
Create CLUSTERED Index IDX_PessoaFisica_Cnh
ON PessoaFisica(ValidadeCnh);
DeadLock
Um deadlock acontece quando duas ou mais tarefas bloqueiam uma à outra
permanentemente, sendo que cada uma tem o bloqueio de um recurso, que a outra tarefa
está tentando bloquear. Por exemplo:
A transação A adquire um bloqueio compartilhado da linha 1.
A transação B adquire um bloqueio compartilhado da linha 2.
A transação A agora solicita um bloqueio exclusivo na linha 2 e é bloqueado até
que a transação B termine e libere o bloqueio compartilhado que tem na linha 2.
A transação B agora solicita um bloqueio exclusivo na linha 1 e é bloqueado até
que a transação A termine e libere o bloqueio compartilhado que tem na linha 1.
A transação A não pode terminar até que a transação B termine, mas a transação B está
bloqueada pela transação A. Essa condição é também chamada de dependência cíclica:
a transação A tem uma dependência da transação B, e a transação B fecha o círculo
tendo uma dependência da transação A.
Ambas as transações em um deadlock esperarão indefinidamente, a menos que o
deadlock seja quebrado por um processo externo. O monitor de deadlock do
Microsoft Mecanismo de banco de dados do SQL Server verifica periodicamente as
tarefas que estão em um deadlock. Se o monitor detectar uma dependência cíclica, ele
escolhe uma das tarefas como vítima e termina sua transação com um erro. Isso permite
que a outra tarefa complete sua transação. O aplicativo com a transação que terminou
com um erro pode repetir a transação, a qual normalmente é concluída depois que a outra
transação em deadlock é encerrada.
Usando certas convenções de codificação em aplicativos reduz a chance de que os
aplicativos causarão deadlocks. Para obter mais informações, consulte Minimizando
deadlocks.
O deadlock é freqüentemente confundido com bloqueio normal. Quando uma transação
solicita um bloqueio em um recurso bloqueado por outra transação, a transação solicitante
espera até que o bloqueio seja liberado. Por padrão, as transações SQL Server não têm
tempo limite, a menos que LOCK_TIMEOUT seja configurado. A transação solicitante é
bloqueada, não em deadlock, por que ela não fez nada para bloquear a transação que
deve o bloqueio. Finalmente, a transação proprietária vai terminar e liberar o bloqueio e a
transação solicitante terá o bloqueio atribuído e processado.
Os deadlocks às vezes são chamados de abraço mortal.
Deadlock é uma condição que pode ocorrer em qualquer sistema com vários threads, não
só em sistemas de gerenciamento de banco de dados relacional, e pode ocorrer para
outros recursos, além de bloqueios de objetos em bancos de dados. Por exemplo, um
thread em um sistema operacional de vários threads pode adquirir um ou mais recursos,
como bloqueios de memória. Se o recurso sendo adquirido é atualmente propriedade de
outro thread, o primeiro thread pode ter que esperar o thread proprietário liberar o recurso
alvo. O thread em espera tem uma dependência do thread proprietário para aquele
recurso em particular. Em uma instância do Mecanismo de Banco de Dados, sessões
podem fazer um deadlock ao adquirir recursos que não são de banco de dados, como
memória ou threads.
TentaNovamente:
SET @NumTentativas += 1 -- incrementa o contador
BEGIN TRY
BEGIN TRANSACTION
UPDATE Production.Product SET ListPrice = 09.99 WHERE ProductID = 1
UPDATE Production.Product SET ListPrice = 04.99 WHERE ProductID = 2
COMMIT TRANSACTION
END TRY
BEGIN CATCH
SET @Err = @@ERROR
IF @Err = 1205 -- um deadlock foi detectado
BEGIN
ROLLBACK TRANSACTION
WAITFOR DELAY '00:00:05'
PRINT 'Aconteceu um deadlock!, tentativa ' + CAST(@NumTentativas AS CHAR(1)) -- insira
aqui o que você quer fazer para avisar ao usuario sobre a nova tentativa, etc.
IF @NumTentativas < @MaxPermitido -- testa quantas vezes tentaremos de novo
GOTO TentaNovamente; -- tenta executar o update novamente
END
END CATCH
Packges
Funções do SQL
Exemplo Count()
Split
Tuning