Вы находитесь на странице: 1из 3

Views e Procedures

Views(Visualizao)
O objeto view permite a criao de vrias visualizaes de uma
ou mais tabelas. Diferentemente de uma tabela, uma view no
ocupa espao fsico para armazenar os dados, pois basicamente
ela um objeto com um comando SELECT encapsulado. Por
este motivo, alguns autores a definem como tabela virtual
Sintaxe
CREATE VIEW nome_view
AS
SELECT
FROM
[WHERE];

Restries: no utilizer ORDER BY/SELECT INTO.


Exemplo 1: Criar uma view para acesso externo com os dados: RA,
nome, curso, semester(ativos).
CREATE VIEW DadosAlunos
AS
SELECT RA, nome, curso, semestre
FROM Alunos WHERE Ativo=1;
Caso seja necessrio alterar a view acrescentando a data de
nascimento
DROP VIEW DadosAlunos;
CREATE VIEW DadosAlunos
AS
SELECT RA, nome, curso, semestre, DatNascto
FROM Alunos
WHERE Ativo = 1;
Uma view pode utilizar subquery, funes agregadoras e joins.
Stored Procedures (Procedimentos armazenados)
Permitem o encapsulamento de um ou mais comandos SQL,
atravs da criao do objeto procedure. Uma procedure pode:

Aceitar parmetros de entrada e retornar vrios valores como


parmetros de sada;

Conter instrues de programao SQL que executam


operaes dentro do banco de dados, inclusive outras
procedures.
Retornar um valor de status a um procedimento de chamada ou
lote para indicar xito ou falha (e o motivo da falha).

Sintaxe bsica:
CREATE PROCEDURE nome_procedure
(@parametro1 tipo1 [OUTPUT], @parametroN tipo [OUTPUT])
AS
BEGIN
[DECLARE]
[SET]
[IF/ELSE/END IF]
Comandos SQL/SELECT, INSERT, UPDATE, DELETE)
END

Parmetros: devem comear obrigatoriamente com @.


Tipo: deve representar um tipo vlido do SGBD em questo.
OUTPUT/OUT: utilizado para indicar quando um parmetro
retornar valores da sada (opcional).
DECLARE: permite a declarao de variveis
SET: Define valor a uma varivel ou parmetro.
EXECUTE/EXEC: utilizado para executar uma procedure.

Exemplo 1: Criar uma procedure que retorne a mdia de um aluno,


a mdia geral do semestre/curso deste aluno e o status (aprovado
ou reprovado):
CREATE PROCEDURE MediaAluno (@RA int, @MediaAluno
numeric(2,2) OUTPUT,
@MediaGeral numeric(2,2)
OUTPUT,
@Status varchar(10) OUT);
AS
BEGIN
DECLARE @curso varchar(4), @semestre int,
SELECT @curso = curso, @semestre = semestre,
@MediaAluno = Nota
FROM Aluno
WHERE RA=@RA;
--Seleciona media do semestre

SET @MediaGeral = SELECT AVG(Nota)


FROM Alunos
WHERE curso = @curso
AND semestre = @semestre;
IF (@MediaAluno >= 6)
SET @Status = Aprovado;
ELSE
SET @Status = Reprovado;
END IF;
END;

Exemplo 2:
DECLARE @MediaAluno numeric(2,2),
@MediaGeral numeric(2,2),
@Status varchar(10)
--Chamada da proc
EXEC PRMediaAluno(8207925381,@MediaAluno OUT,
@MediaGeral OUT, @Status OUT;
SELECT @MediaAluno, @MediaGeral, @Status