Pessoal, sei que aqui não forum de Oracle, mas acredito muito na comunidade de usuarios do GUJ e talvez alguem consiga me ajudar.
O fato é que estou precisando construir uma procedure para restruturar alguns dados da minha base. O fato é que sempre executo a consulta
select distinct smt.cd_turma into numero_aluno
from sugestao_matricula_turma smt
where smt.nu_matr_curso = matr_curso and smt.cd_turma = cd_turma;
Ele me retorna 8 resultados, o que para mim é inadmissível, pois nu_matr_curso e cd_turma são chaves primaria da tabela sugestao_matricula_turma. Gostaria que alguem pudesse me explicar o que estou fazendo de errado.
A seguir o código da procedure completo:
create or replace procedure prc_sugestao_score_vest(periodoLetivo varchar2) is
numero_aluno integer;
cd_compnt_curr componente_curricular.cd_compnt_curr%type;
cd_turno turno.cd_turno%type;
cd_turma turma.cd_turma%type;
scr_vest integer;
matr_curso vinculo.nu_matr_curso%type;
cd_compnt_curr_turma componente_curricular.cd_compnt_curr%type;
cd_turno_turma turno.cd_turno%type;
cd_turma_turma turma.cd_turma%type;
cursor c_aluno_compnt_curr is
select aa.cd_compnt_curr, tv.cd_turno, trunc(v.nu_escr_obtido_vest), v.nu_matr_curso, smt.cd_turma
from sugestao_matricula_turma smt,
turno_vinculo tv,
atividade_academica aa,
turma t,
vinculo v
where smt.nu_matr_curso=tv.nu_matr_curso
and smt.cd_turma=t.cd_turma
and t.cd_ativ_acad=aa.cd_ativ_acad
and smt.fl_fera='1'
and v.nu_matr_curso = smt.nu_matr_curso
order by aa.cd_compnt_curr, tv.cd_turno, trunc(v.nu_escr_obtido_vest) desc;
cursor c_turma_compnt_curr is
select distinct aac.cd_compnt_curr, tvi.cd_turno, smt.cd_turma
from sugestao_matricula_turma smt,
turma tur,
atividade_academica aac,
turno_vinculo tvi
where smt.fl_fera = 1
and tur.cd_turma = smt.cd_turma
and tur.cd_ativ_acad = aac.cd_ativ_acad
and tvi.nu_matr_curso = smt.nu_matr_curso
order by aac.cd_compnt_curr, tvi.cd_turno, smt.cd_turma ;
begin
open c_aluno_compnt_curr;
FETCH c_aluno_compnt_curr INTO cd_compnt_curr, cd_turno, scr_vest, matr_curso, cd_turma;
loop
open c_turma_compnt_curr;
loop
FETCH c_turma_compnt_curr INTO cd_compnt_curr_turma, cd_turno_turma, cd_turma_turma;
exit when c_turma_compnt_curr%notfound;
if(cd_compnt_curr = cd_compnt_curr_turma and cd_turno = cd_turno_turma) then
select distinct smt.cd_turma into numero_aluno
from sugestao_matricula_turma smt
where smt.nu_matr_curso = matr_curso and smt.cd_turma = cd_turma;
DBMS_OUTPUT.PUT(numero_aluno);
DBMS_OUTPUT.PUT('-');
DBMS_OUTPUT.PUT('select count(*) into numero_aluno
from sugestao_matricula_turma smt
where smt.nu_matr_curso = ');
DBMS_OUTPUT.PUT(matr_curso);
Dbms_Output.put('and smt.cd_turma = ');
DBMS_OUTPUT.put_line(cd_turma);
delete from sugestao_matricula_turma smt where smt.nu_matr_curso = matr_curso and smt.cd_turma = cd_turma;
insert into sugestao_matricula_turma (nu_matr_curso,cd_turma,fl_prio,fl_sugst,fl_fera) VALUES (matr_curso, cd_turma_turma, 1, 1, numero_aluno);
FETCH c_aluno_compnt_curr INTO cd_compnt_curr, cd_turno, scr_vest, matr_curso, cd_turma;
end if;
end loop;
close c_turma_compnt_curr;
exit when c_aluno_compnt_curr%notfound;
end loop;
close c_aluno_compnt_curr;
end;