notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o...

26
LISTA DE EXERCÍCIOS - BDII VISÕES (VIEW) 01 - Crie uma view que mostre a pesquisa que retorna o resultado abaixo: ALTER VIEW VW_ALUNO AS SELECT REPLICATE('0',5-(LEN(Cod_Aluno))) +CONVERT(VARCHAR(5),COD_ALUNO) AS CODALUNO, Nome_Aluno AS NOME_ALUNO, CONVERT(CHAR,Data_Nascimento,103) AS DATA FROM ALUNO WHERE Data_Nascimento IS NOT NULL 02 - Crie uma view que aproveitando a view anterior mostre além dos dados do aluno, os dados da disciplina que ele está cursando, como na figura abaixo: CREATE VIEW VW_ALUNO_NOTA AS SELECT DISTINCT A.CODALUNO, A.NOME_ALUNO, A.DATA, REPLICATE('0',5-(LEN(D.CODIGO_DISCIPLINA))) +CONVERT(VARCHAR(5),D.codigo_disciplina) AS CODDISCIPLINA,

Transcript of notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o...

Page 1: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

LISTA DE EXERCÍCIOS - BDII

VISÕES (VIEW)

01 - Crie uma view que mostre a pesquisa que retorna o resultado abaixo:

ALTER VIEW VW_ALUNO

AS

SELECT REPLICATE('0',5-(LEN(Cod_Aluno)))+CONVERT(VARCHAR(5),COD_ALUNO) AS CODALUNO,

Nome_Aluno AS NOME_ALUNO,

CONVERT(CHAR,Data_Nascimento,103) AS DATA

FROM ALUNO

WHERE Data_Nascimento IS NOT NULL

02 - Crie uma view que aproveitando a view anterior mostre além dos dados do aluno, os dados da disciplina que ele está cursando, como na figura abaixo:

CREATE VIEW VW_ALUNO_NOTA

AS

SELECT DISTINCT

A.CODALUNO,

A.NOME_ALUNO,

A.DATA,

REPLICATE('0',5-(LEN(D.CODIGO_DISCIPLINA)))+CONVERT(VARCHAR(5),D.codigo_disciplina) AS CODDISCIPLINA,

CONVERT(DECIMAL(10,2),M.NOTA) AS NOTA,

CASE M.SITUACAO

WHEN 'NOK' THEN 'REPROVADO'

Page 2: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

WHEN 'OK' THEN 'APROVADO'

ELSE 'NÃO DEFINIDO'

END AS SITUACAO

FROM VW_ALUNO A, Matricula M, Disciplina D

WHERE A.CODALUNO=M.cod_Aluno

AND M.cod_Disciplina=D.codigo_disciplina

03 - Crie uma view que aproveitando a view anterior mostre além dos dados do aluno e os dados da disciplina que ele está cursando, mostre os dados da disciplina como na figura abaixo:

CREATE VIEW VW_ALUNO_DISCIPLINA_NOTA

AS

SELECT DISTINCT

V.CODALUNO,

V.NOME_ALUNO,

V.DATA,

V.CODDISCIPLINA,

D.NOME AS DISCIPLINA,

(SELECT CASE

WHEN D.pre_requisito IS NOT NULL THEN (SELECT D2.NOME FROM DISCIPLINA D2 WHERE D2.codigo_disciplina=D.pre_requisito)

WHEN D.pre_requisito IS NULL THEN 'NÃO POSSUI'

END) AS PREREQUISITO,

D.creditos AS CREDITOS,

V.NOTA,

V.SITUACAO

FROM VW_ALUNO_NOTA V,Disciplina D

WHERE D.codigo_disciplina=V.CODDISCIPLINA

Page 3: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

04 - Crie uma view que aproveitando a view anterior mostre além dos dados do aluno, os dados da disciplina que ele está cursando, mostre os dados do professor da disciplina como na figura abaixo:

CREATE VIEW VW_ALUNO_NOTA_PROFESSOR

AS

SELECT DISTINCT

V.CODALUNO,

V.NOME_ALUNO,

V.DATA,

V.CODDISCIPLINA,

V.DISCIPLINA,

V.PREREQUISITO,

V.CREDITOS,

V.NOTA,

V.SITUACAO,

REPLICATE('0',5-(LEN(P.cod_professor)))+CONVERT(VARCHAR(5),P.cod_professor) AS CODPROFESSOR,

P.nome_professor AS PROFESSOR

FROM VW_ALUNO_DISCIPLINA_NOTA V, DISCIPLINA D, Professor P

WHERE P.cod_professor=D.cod_prof

AND D.codigo_disciplina=V.CODDISCIPLINA

05 - Crie uma view com o nome de VW_BOLETIM que aproveitando a view com os dados do aluno e os dados da disciplina que ele está cursando, mostre os dados da Média Geral da disciplina e o Desvio Padrão da nota do aluno como na figura abaixo:

CREATE VIEW VW_BOLETIM

AS

SELECT DISTINCT

Page 4: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

V.CODALUNO,

V.NOME_ALUNO,

V.DATA,

V.CODDISCIPLINA,

V.DISCIPLINA,

V.PREREQUISITO,

V.CREDITOS,

V.NOTA,

V.SITUACAO,

(SELECT CONVERT(DECIMAL(10,2),AVG(NOTA)) FROM MATRICULA WHERE cod_Disciplina=V.CODDISCIPLINA) AS MEDIA_GERAL,

(V.NOTA-(SELECT CONVERT(DECIMAL(10,2),AVG(NOTA)) FROM MATRICULA WHERE cod_Disciplina=V.CODDISCIPLINA)) AS DESVIO_PADRAO

FROM VW_ALUNO_DISCIPLINA_NOTA V

--WHERE CODDISCIPLINA=1

06 - Crie uma view com o nome de VW_BOLETIM_COMPARATIVO que aproveitando a view anterior, mostre os dados da Menor e da Maior nota da disciplina como na figura abaixo:

CREATE VIEW VW_BOLETIM_DETALHADO

AS

SELECT DISTINCT

V.CODALUNO,

V.NOME_ALUNO,

V.DATA,

V.CODDISCIPLINA,

V.DISCIPLINA,

V.PREREQUISITO,

V.CREDITOS,

Page 5: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

V.NOTA,

V.SITUACAO,

V.MEDIA_GERAL,

V.DESVIO_PADRAO,

(SELECT MIN(V2.NOTA) FROM VW_BOLETIM V2 WHERE V2.CODDISCIPLINA=V.CODDISCIPLINA) AS MENOR_NOTA,

(SELECT MAX(V2.NOTA) FROM VW_BOLETIM V2 WHERE V2.CODDISCIPLINA=V.CODDISCIPLINA) AS MAIOR_NOTA

FROM VW_BOLETIM V

TRIGGERS (GATILHOS)

01 - Crie uma trigger que ao inserir um novo professor ela exiba na tela a seguinte mensagem:

FOI INSERIDO UM PROFESSOR COM OS SEGUINTES DADOS:

CÓDIGO: <código>

NOME: <nome>

create trigger NovoProfessor on [Professor]

for insert as

DECLARE @CODIGO INT, @NOME VARCHAR(50)

SELECT @CODIGO=cod_professor, @NOME=nome_professor

FROM inserted

Page 6: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

print 'FOI INSERIDO UM PROFESSOR COM OS SEGUINTES DADOS:'

print ''

print 'Codigo: '+convert(varchar(10),@codigo)

print 'Professor: '+@nome

insert into Professor values (1, 'William')

02 - Crie uma trigger que ao alterar os dados de um professor ela exiba na tela a seguinte mensagem:

FOI ALTERADO OS DADOS DO PROFESSOR:

CÓDIGO: <código>

NOME: <nome>

QUE DÁ AULA EM 0 DISCIPLINAS.

CREATE TRIGGER TR_PROFESSOR

ON PROFESSOR

FOR UPDATE

AS BEGIN

DECLARE @CODIGO INT, @PROFESSOR VARCHAR(50), @QTD INT

SELECT @CODIGO=cod_professor, @PROFESSOR=nome_professor FROM deleted

SELECT @QTD=COUNT(*) FROM Disciplina WHERE cod_prof=@CODIGO

Page 7: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

PRINT 'FOI ALTERADO OS DADOS DO PROFESSOR: '

PRINT ''

PRINT 'CÓDIGO: '+CONVERT(VARCHAR(10),@CODIGO)

PRINT 'NOME: '+@PROFESSOR

PRINT 'QUE DÁ AULA EM '+CONVERT(VARCHAR(5),@QTD)+' DISCIPLINAS.'

END

update Professor set nome_professor='Daiane' where cod_professor = 1

insert into Professor values (1, 'William')

SELECT * FROM Professor

03 - Crie uma trigger que ao inserir/alterar dados na tabela disciplina e não for atribuído um professor a mesma exiba uma pesquisa com todos os professores cadastrados no banco.

CREATE TRIGGER TR_DISCIPLINA

ON DISCIPLINA

FOR INSERT, UPDATE

AS BEGIN

IF ((SELECT COUNT(*) FROM inserted WHERE cod_prof IS NULL)>0) BEGIN

SELECT * FROM Professor ORDER BY nome_professor

END

Page 8: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

END

INSERT INTO Disciplina (codigo_disciplina,nome,pre_requisito,creditos,cod_prof)

VALUES (8, 'Engenharia de Software',null,2,null)

update Disciplina set cod_prof=222 where codigo_disciplina=8

select * from Disciplina

select * from Professor

04 - Crie uma trigger que ao apagar os dados da tabela matrícula, mostre na tela a seguinte mensagem:

OS DADOS ABAIXO FORAM APAGADOS DA TABELA MATRICULA:

CÓDIGO DO ALUNO: <código_aluno>

NOME DO ALUNO: <nome_aluno>

CÓDIGO DA DISCIPLINA: <código_disciplina>

NOME DA DISCIPLINA: <nome_disciplina>

CÓDIGO DO PROFESSOR: <código_professor>

NOME DO PROFESSOR: <nome_professor>

SITUAÇÃO: <APROVADO / REPROVADO>

CREATE TRIGGER TR_APAGAR_MATRICULA

ON MATRICULA

FOR DELETE

AS BEGIN

Page 9: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

DECLARE @CODIGOALUNO INT, @ALUNO VARCHAR(50),

@CODIGODISC INT, @DISCIPLINA VARCHAR(50),

@CODIGOPROF INT, @PROFESSOR VARCHAR(50),

@SITUACAO CHAR(10)

SELECT @CODIGOALUNO=COD_ALUNO, @CODIGODISC=COD_DISCIPLINA, @SITUACAO=CASE(situacao)

WHEN 'OK' THEN 'APROVADO'

WHEN 'NOK' THEN 'REPROVADO'

END

FROM deleted

SELECT @ALUNO=ALUNO.Nome_Aluno FROM Aluno WHERE ALUNO.Cod_Aluno=@CODIGOALUNO

SELECT @DISCIPLINA=DISCIPLINA.nome, @CODIGOPROF=PROFESSOR.cod_professor, @PROFESSOR=PROFESSOR.nome_professor

FROM Disciplina, Professor

WHERE Disciplina.cod_prof=Professor.cod_professor

AND DISCIPLINA.codigo_disciplina=@CODIGODISC

PRINT 'OS DADOS ABAIXO FORAM APAGADOS DA TABELA MATRICULA: '

PRINT ''

PRINT 'CÓDIGO DO ALUNO: '+CONVERT(VARCHAR(10),@CODIGOALUNO)

PRINT 'NOME DO ALUNO: '+@ALUNO

Page 10: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

PRINT 'CÓDIGO DA DISCIPLINA: '+CONVERT(VARCHAR(10),@CODIGODISC)

PRINT 'NOME DA DISCIPLINA: '+@DISCIPLINA

PRINT 'CÓDIGO DO PROFESSOR: '+CONVERT(VARCHAR(10),@CODIGOPROF)

PRINT 'NOME DO PROFESSOR: '+@PROFESSOR

PRINT 'SITUACAO: '+@SITUACAO

END

DELETE FROM Matricula WHERE cod_Aluno=222 AND cod_Disciplina=2

SELECT * FROM Matricula

05 - Crie uma trigger que altere/insira automaticamente a situação de uma disciplina quando a nota dessa disciplina for modificada ou inserida. Para nota abaixo de 5 a situação de ser igual a ‘NOK’, quando a nota for igual ou maior que 5, a situação deve ser igual a ‘OK’.

CREATE TRIGGER TR_MATRICULA

ON MATRICULA

FOR INSERT, UPDATE

AS BEGIN

DECLARE @CODALUNO INT, @CODDISC INT, @NOTA DECIMAL(4,2)

SELECT @CODALUNO=COD_ALUNO, @CODDISC=COD_DISCIPLINA, @NOTA=NOTA FROM inserted

IF (@NOTA>=5) BEGIN

UPDATE Matricula SET situacao='OK' WHERE cod_Aluno=@CODALUNO AND cod_Disciplina=@CODDISC

Page 11: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

END

ELSE BEGIN

UPDATE Matricula SET situacao='NOK' WHERE cod_Aluno=@CODALUNO AND cod_Disciplina=@CODDISC

END

END

SELECT * FROM Matricula

INSERT INTO Matricula (cod_Aluno, cod_Disciplina, nota, situacao)

VALUES (111,8,4,'OK')

UPDATE Matricula SET NOTA=5 WHERE cod_Aluno=222 AND cod_Disciplina=6

06 - Crie uma tabela de Log (TB_LOG) que contenha DATA (DATETIME), AÇÃO (VARCHAR(10)), TABELA (NVARCHAR(30)), USUÁRIO (NVARCHAR(15)) e OBSERVAÇÃO (NVARCHAR(1000)) e as triggers que a alimente quando for realizada qualquer operação nas tabelas do BD. Exemplo de conteúdo da tabela de log:

ALTER TRIGGER TR_LOG_ALUNO

ON ALUNO

FOR INSERT, UPDATE, DELETE

AS BEGIN

DECLARE @QTDI INT, @QTDD INT,

@CODI INT, @NOMEI VARCHAR(50), @DATAI DATETIME,

Page 12: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

@CODD INT, @NOMED VARCHAR(50), @DATAD DATETIME,

@ACAO VARCHAR(10),@OBSERVACAO VARCHAR(1000), @USUARIO VARCHAR(15), @TABELA VARCHAR(30), @DATAT DATETIME

SELECT @QTDI=COUNT(*) FROM inserted

SELECT @QTDD=COUNT(*) FROM deleted

SELECT @USUARIO=SYSTEM_USER

SELECT @DATAT=CONVERT(VARCHAR(10),GETDATE(),103)

IF (@QTDI>0 AND @QTDD>0) BEGIN

SET @ACAO='ALTEROU'

SELECT @CODI=COD_ALUNO, @NOMEI=NOME_ALUNO, @DATAI=DATA_NASCIMENTO FROM inserted

SELECT @CODD=COD_ALUNO, @NOMED=NOME_ALUNO, @DATAD=DATA_NASCIMENTO FROM deleted

SELECT @OBSERVACAO='NOVO = CODIGO: '+CONVERT(VARCHAR(10), @CODI)+' - NOME: '+@NOMEI+' - DATA NASCIMENTO: '+CONVERT(VARCHAR(10),@DATAI,103)+

' | VELHO = CODIGO: '+CONVERT(VARCHAR(10), @CODD)+' - NOME: '+@NOMED+' - DATA NASCIMENTO: '+CONVERT(VARCHAR(10),@DATAD,103)

END

ELSE BEGIN

IF (@QTDI>0) BEGIN

Page 13: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

SET @ACAO='INSERIU'

SELECT @CODI=COD_ALUNO, @NOMEI=NOME_ALUNO, @DATAI=DATA_NASCIMENTO FROM inserted

SELECT @OBSERVACAO='CODIGO: '+CONVERT(VARCHAR(10), @CODI)+' - NOME: '+@NOMEI+' - DATA NASCIMENTO: '+CONVERT(VARCHAR(10),@DATAI,103)

END

ELSE BEGIN

SET @ACAO='APAGOU'

SELECT @CODI=COD_ALUNO, @NOMEI=NOME_ALUNO, @DATAI=DATA_NASCIMENTO FROM deleted

SELECT @OBSERVACAO='CODIGO: '+CONVERT(VARCHAR(10), @CODD)+' - NOME: '+@NOMED+' - DATA NASCIMENTO: '+CONVERT(VARCHAR(10),@DATAD,103)

END

SELECT @TABELA='ALUNO'

INSERT INTO TB_LOG (DATA, ACAO, TABELA, USUARIO, OBSERVACAO)

VALUES (@DATAT, @ACAO, @TABELA, @USUARIO, @OBSERVACAO)

END

END

Page 14: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

select * from Aluno

select * from tb_log

insert into Aluno values (4, 'William', '')

SELECT * FROM sys.tables

STORED PROCEDURE (PROCEDIMENTOS)

01 - Crie uma stored procedure que gerencie a inserção de um novo professor, ela deve tratar as informações, buscando garantir que não exista um professor com o mesmo nome (inserção duplicada) e após a inserção exiba na tela os dados inseridos.

create procedure ins_prof

@nome nvarchar (50),

@codigo int

as begin

declare @nro int

select @nro=count(*)

from professor

where cod_professor=@codigo or nome_professor=@nome

if (@nro>0) begin

print 'NÃO PODE SER CADASTRADO!'

END

ELSE BEGIN

Page 15: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

INSERT INTO Professor (cod_professor, nome_professor) values (@codigo, @nome)

select * from Professor where cod_professor=@codigo

end

End

exec ins_prof 'Maria', '1111'

select * from professor

02 - Crie uma stored procedure que gerencie a inserção de um novo aluno, ela deve tratar as informações, buscando garantir que não exista uma inserção duplicada, para isso utilize a data de nascimento do aluno e o nome do mesmo e após a inserção exiba na tela a seguinte os dados inseridos.

create procedure ins_aluno

@nomealuno nvarchar (50),

@dtnasc date

as begin

declare @nro int, @codaluno int

select @nro=count(*)

from Aluno

where Data_Nascimento=@dtnasc and Nome_Aluno=@nomealuno

if (@nro>0) begin

Page 16: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

print 'ALUNO JA CADASTRADO!'

END

ELSE BEGIN

select @codaluno=MAX(cod_aluno)+1 from Aluno

INSERT INTO Aluno (Cod_Aluno, Nome_Aluno, Data_Nascimento) values (@codaluno,@nomealuno,@dtnasc)

select * from Aluno where Data_Nascimento=@dtnasc and Nome_Aluno=@nomealuno

end

End

exec ins_aluno 'Fernanda', '16-12-1988'

select * from Aluno

select * from aluno

--delete from Aluno where Cod_Aluno>=1379

03 - Crie uma stored procedure que gerencie a inserção de uma nova disciplina, ela deve tratar as informações, buscando garantir que não exista uma inserção duplicada, para isso utilize o nome da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

create procedure ins_disciplina

@nomedisciplina nvarchar (50)

as begin

Page 17: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

declare @nro int, @coddisc int, @credito int

select @nro=count(*)

from Disciplina

where nome = @nomedisciplina

if (@nro>0) begin

print 'DISCIPLINA JA CADASTRADA!'

END

ELSE BEGIN

select @coddisc=MAX(codigo_disciplina)+1,

@credito=MAX(creditos)+1

from Disciplina

INSERT INTO Disciplina(codigo_disciplina, nome, creditos) values (@coddisc,@nomedisciplina, @credito)

select * from Disciplina where nome = @nomedisciplina

end

End

exec ins_disciplina 'Contabilidade'

select * from Disciplina

Page 18: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

04 - Crie uma stored procedure que gerencie a inserção de uma nova matricula numa disciplina, ela deve tratar as informações, buscando garantir que não exista uma inserção duplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

create procedure ins_matricula

@cod_aluno int, @cod_disc int

as begin

declare @nro int

select @nro=count(*)

from Matricula

where cod_Aluno = @cod_aluno

and cod_Disciplina = @cod_disc

if (@nro>0) begin

print 'MATRICULA JA CADASTRADA!'

END

ELSE BEGIN

INSERT INTO Matricula(cod_Aluno, cod_Disciplina) values (@cod_aluno, @cod_disc)

select * from Matricula where cod_Aluno = @cod_aluno and cod_Disciplina = @cod_disc

end

End

exec ins_matricula '100', '1'

Page 19: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

select * from Matricula

05 - Crie uma stored procedure que através da passagem do código do professor exiba quais disciplinas o mesmo ministra.

create procedure PROFESSOR_DISCIPLINA

@cod int

as begin

select CODPROFESSOR=p.cod_professor, PROFESSOR=p.nome_professor,

CODIGODISCIPLINA=d.codigo_disciplina, DISCIPLINA=d.nome

from Professor p, Disciplina d

where d.cod_prof=p.cod_professor

and p.cod_professor=@cod

if (@@ROWCOUNT=0) begin

print 'NENHUM PROFESSOR MATRICULADO NESSA DISCIPLINA!'

END

End

exec PROFESSOR_DISCIPLINA 111

select * from professor

Page 20: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

06 - Crie uma stored procedure que através da passagem do código da disciplina exiba quais alunos estão matriculados na mesma e o seu respectivo professor.

create procedure ALUNO_DISCIPLINA_PROFESSOR

@cod int

as begin

select coddisciplina=d.codigo_disciplina, Disciplina=d.nome, codigoaluno=a.Cod_Aluno, Aluno=a.Nome_Aluno,

codprofessor=p.cod_professor, Professor=p.nome_professor

from Aluno a, Matricula m, Disciplina d, Professor p

where a.Cod_Aluno=m.cod_Aluno

and m.cod_Disciplina=d.codigo_disciplina

and d.cod_prof=p.cod_professor

and m.cod_Disciplina=@cod

if (@@ROWCOUNT=0) begin

print 'NENHUM ALUNO MATRICULADO NESSA DISCIPLINA!'

END

End

exec ALUNO_DISCIPLINA_PROFESSOR 2

07 - Crie uma stored procedure que através da passagem do código do aluno exiba o boletim escolar do aluno conforme o layout abaixo:

create procedure BOLETIM

@cod int

as begin

Page 21: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

select CODALUNO=replicate('0',5-len(a.Cod_Aluno))+CONVERT(varchar(5),a.Cod_Aluno), ALUNO=a.Nome_Aluno,

DATA=convert(char,a.Data_Nascimento,103),

CODDISCIPLINA=replicate('0',5-len(d.codigo_disciplina))+CONVERT(varchar(5),d.codigo_disciplina),

DISCIPLINA=d.nome,PREREQUISITO=case(d.pre_requisito) when 1 then 'Banco de Dados I' when 4 then 'Sistemas de Informação I'

else 'NÃO POSSUI' end, CREDITOS=d.creditos, NOTA=m.nota,

SITUACAO=case(m.situacao) when 'OK' then 'APROVADO' when 'NOK' then 'REPROVADO' else 'NÃO DEFINIDO' end,

MEDIA_GERAL=(SELECT CONVERT(CHAR(5),CONVERT(NUMERIC(4,2),AVG(M2.NOTA))) FROM MATRICULA M2 WHERE M.COD_DISCIPLINA=M2.COD_DISCIPLINA),

DESVIO_PADRAO=(m.nota-(select CONVERT(CHAR(5),CONVERT(NUMERIC(4,2),AVG(M2.NOTA))) FROM MATRICULA M2 WHERE M.COD_DISCIPLINA=M2.COD_DISCIPLINA)),

MENOR_NOTA =(SELECT CONVERT(CHAR(5),CONVERT(NUMERIC(4,2),MIN(M2.NOTA))) FROM MATRICULA M2 WHERE M.COD_DISCIPLINA=M2.COD_DISCIPLINA),

MAIOR_NOTA =(SELECT CONVERT(CHAR(5),CONVERT(NUMERIC(4,2),MAX(M2.NOTA))) FROM MATRICULA M2 WHERE M.COD_DISCIPLINA=M2.COD_DISCIPLINA)

from Aluno a, Matricula m, Disciplina d

where a.Cod_Aluno=m.cod_Aluno

and m.cod_Disciplina=d.codigo_disciplina

and m.cod_Aluno=@cod

group by a.Cod_Aluno, a.Nome_Aluno, a.Data_Nascimento, d.codigo_disciplina, d.nome,

d.pre_requisito, d.creditos, m.nota, m.situacao, m.cod_Disciplina

if (@@ROWCOUNT=0) begin

print 'ALUNO NAO CADASTRADO!'

Page 22: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

END

End

exec BOLETIM 00222

08 - Crie uma stored procedure que através da passagem da data atual, execute o procedimento de backup full do banco de dados.

create procedure SP_BACKUP

@DATA DATETIME

AS BEGIN

DECLARE @DIA SMALLINT, @MES SMALLINT, @ANO INT, @ARQ VARCHAR(50)

SELECT @DIA=DAY(@DATA), @MES=MONTH(@DATA), @ANO=YEAR(@DATA)

SET @ARQ='C:\BKP\ESCOLA_' +CONVERT(VARCHAR(2),@DIA+''+CONVERT(VARCHAR(2), @MES)+''+CONVERT(VARCHAR(4), @ANO)+'.BAK')

BACKUP DATABASE ESCOLA

TO DISK ='C:\BKP\ESCOLA.BAK'

WITH STATS=1

END

DECLARE @D DATETIME

SELECT @D=GETDATE()

Page 23: notasagora.files.wordpress.com …  · Web viewduplicada, para isso utilize o código do aluno e o código da disciplina e após a inserção exiba na tela a seguinte os dados inseridos.

EXEC SP_BACKUP (SELECT GETDATE())

09 - Crie uma stored procedure que através da passagem do nome do arquivo de backup, execute o procedimento de restaurar o backup do banco de dados.

CREATE PROCEDURE SP_RESTORE

@NOME VARCHAR(50)

AS BEGIN

RESTORE DATABASE TESTE

FROM DISK='D:\BKP\TESTE.BAK'

WITH REPLACE, NORECOVERY, STATS=1

END