Saiu!!!!!!!

Em um dos post anteriores, coloquei um projeto de Banco de dados objeto relacional [leiam artigos anteriores]. Depois de tanto esgotamento do meu QI, finalmente saiu! Ai embaixo segue os scripts de criação, inserção, procedimentos…

>>>>>>>>>>> Criação dos tipos <<<<<<<<<<<<<<<<<

create type Ttelefone as varray(10) of varchar(10)

create type Tendereco as object (
rua varchar(20),
cidade varchar(20),
estado varchar(20),
);

CREATE TYPE Tpessoa AS OBJECT (
DataNasc DATE,
Endereco Tendereco,
Nome  VARCHAR(50),
Telefone Ttelefone,
MEMBER FUNCTION IDADE RETURN NUMBER ) not final;
/* Função que calcula a idade do aluno */
create or replace TYPE BODY Tpessoa IS
MEMBER FUNCTION idade RETURN NUMBER as
Ano number; Mes number; Dia number; AnoP number;
MesP number; DiaP number; Idade number;
BEGIN
Ano := extract(year from sysdate);
Mes:= extract(month from sysdate);
Dia:= extract(day from sysdate);
AnoP:= extract(year from self.DataNasc);
MesP:= extract(month from self.dataNasc);
DiaP:= extract(day from self.DataNasc);
create type Tprofessor under Tpessoa(
areaEspec varchar(25)
numContr varchar(25),
);

create type Taluno under Tpessoa(
TempoCurso number,
AnoIngresso varchar(10),
Matricula varchar(10)
);
create type Tprofessor under Tpessoa(
areaEspec varchar(25),
numContr varchar(25)
);

create type TPre_Requisitos as varray(10) of ref Tdisciplina;

create type Tdisciplina as object(
CodDisc varchar(10),
Nome varchar(50),
cargaHoraria number,
PreReq TPre_Requisitos
);
create type Tturma as object(
semesLetivo number,
codTurma varchar(10),
disciplina ref Tdisciplina,
professor ref Tprofessor
);

create type Tmatricula as object(
status varchar(50),
mediaFinal number,
aluno ref Taluno,
turma ref Tturma
);

>>>>>>>>>>>>>> Criação dos procedimentos de matricular e alocar <<<<<<<<<<<<<<

/* matricular aluno */

create or replace procedure mataluno(
matricula1 alunos.Matricula%TYPE,
codTurma1 turmas.codTurma%TYPE)
as
aluno ref Taluno;
turma ref Tturma;
pre_Reqs TPre_Requisitos;
refDisciplina ref TDisciplina;
Disc_cursada ref TDisciplina;
Disc_req ref TDisciplina;
i number;
certo Boolean;
CURSOR T1Cursor IS
SELECT mat.turma.disciplina FROM matriculas mat, alunos a WHERE mat.aluno = ref(a);
begin
Pre_Reqs := TPre_Requisitos();
Pre_Reqs.EXTEND(10);
select ref(a) into aluno from alunos a where a.matricula = matricula1;
select ref(t) into turma from turmas t where t.codTurma = codTurma1;
select disciplina into refDisciplina from turmas t where t.codTurma=codTurma1;
select disc.PreReq into Pre_Reqs from disciplinas disc where ref(disc) = refDisciplina;
certo:=true;
open T1Cursor;
if Pre_Reqs is not null then
 for i in Pre_Reqs.FIRST..Pre_Reqs.LAST loop
 if certo=false then
  exit;
 end if;
 disc_req := Pre_Reqs(i);
 certo := false;
 loop
  fetch T1Cursor into disc_cursada;
  EXIT WHEN T1Cursor%NOTFOUND;
  if disc_req=disc_cursada then
   certo:= true;
           exit;
      end if;
 end loop;
 end loop;
else certo := true;
end if;
CLOSE T1Cursor;
if certo = true then
 insert into matriculas values(‘INICIADO’,null,aluno,turma);
end if;
end;

/* Alocar professor */

create or replace procedure alocprofessor(
Num_Cont professores.numContr%TYPE,
codTurma turmas.codTurma%TYPE)
as
prof ref Tprofessor;
begin
select ref(p) into prof from professores p where p.numContr = num_Cont;
update turmas set professor = prof where turmas.codTurma = codTurma;
end;

>>>>>>>>>>>>>>>>>>> Criação da tabelas <<<<<<<<<<<<<<<<<<<<

create table alunos of Taluno;
alter table alunos add constraint matricula_chave unique (matricula);

create table professores of Tprofessor;
alter table professores add constraint contrato_chave unique (numContr);

create table disciplinas of Tdisciplina;
alter table disciplinas add constraint disciplina_chave unique (CodDisc);
alter table disciplinas add scope for (PreReq) is disciplinas;(x)

create table turmas of Tturma;
alter table turmas add constraint turma_chave unique (codTurma);
alter table turmas add scope for (disciplina) is disciplinas;
alter table turmas add scope for (professor) is professores;

create table matriculas of Tmatricula;
alter table matriculas add scope for (turma) is turmas;
alter table matriculas add scope for (aluno) is alunos;
>>>>>>>>>>>>>>>>>>>>> Comandos de inserção <<<<<<<<<<<<<<<<<<

insert into professores
values(to_date(’16-FEB-1987′),TENDERECO(‘coque’,’Recife’,’PE’),’Jocelia’,TTELEFONE(34583193),’Saude’,’101010′);

insert into alunos values(’06-MAR-1986′,TENDERECO(‘Avenida’,’Recife’,’Pe’),’Bruno’,TTELEFONE(96397080),3,’2006′,’615406′);

insert into alunos values(’20-SEP-1985′,TENDERECO(‘Logradouro’,’Camaragibe’,’Perambuco’),’Anderson’,TTELEFONE(91286125),3,’2006′,’615423′);

insert into disciplinas values(‘123456′,’Engenharia’,60,null);

insert into disciplinas values(‘147258′,’Banco de Dados’,60,TPre_Requisitos((select ref(d) from disciplinas d where d.codDisc=’123456′)));

insert into turmas values(5,’202020′,(select ref(Disc) from disciplinas disc where disc.codDisc=’147258′),(select ref(prof) from
professores prof where prof.numContr=’101010′));

insert into turmas values(6,’151515′,(select ref(disc) from disciplinas disc where disc.codDisc=’147258′),(select ref(p) from
professores p where p.numContr=’101010′));

insert into turmas values(6,’55555′,(select ref(disc) from disciplinas disc where disc.codDisc=’123456′),null);

insert into matriculas values(‘Reprovado’,10,(select ref(a) from alunos a where a.matricula=’615406′),(select ref(t) from turmas t where t.codTurma=’202020′));

>>>>>>>>>>>>>>>>>>>> Chamada de Procedimentos<<<<<<<<<<<<<<<<<<<<<<<<<<<<
exec mataluno(‘31598745′,’333333’);

exec mataluno(‘615406′,’369852’);

exec alocprofessor(‘123456′,’555555’);

>>>>>>>>>>>>>>>>>>> Consultas <<<<<<<<<<<<<<<<<<<

1. select deref(disciplina).nome,deref(disciplina).cargaHoraria,semesLetivo,deref(professor).nome from turmas;
2. select deref(aluno).nome,deref(turma).disciplina.nome,deref(turma).disciplina.cargaHoraria,status,mediaFinal from matriculas;
3. select d.nome,cargaHoraria,t.semesLetivo,t.codTurma from turmas t,disciplinas d where t.disciplina = ref(d) order by t.semesLetivo;

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: