В настоящее время я изучаю SQL, и у меня возникают проблемы с моей процедурой. Процедура должна вычислять среднее значение столбца под названием «INDICE_METABO_PAT». Мне нужна информация в 3-4 разных таблицах. Затем, когда у меня есть среднее значение, я обновляю таблицу, чтобы установить это среднее значение в соответствующие записи. Вот процедура. Обратите внимание, что все остальное в моем файле .sql работы: вставки, обновления, выбирает, мнения и т.д.SQL Oracle - Синтаксис процедуры (назначение школы)
create or replace Procedure SP_UPDATE_INDICE_METABO_DV (P_NO_ETUDE in number)
is
V_SOMME number := 0;
V_NBPATIENT number := 0;
V_NO_ETUDE number := P_NO_ETUDE;
cursor curseur is
select PATIENT.INDICE_EFFICACITE_METABO_PAT
from ETUDE, DROGUE_VARIANT, ETUDE_PATIENT, PATIENT
where ETUDE.NO_DROGUE = DROGUE_VARIANT.NO_DROGUE
and ETUDE.NO_VAR_GEN = DROGUE_VARIANT.NO_VAR_GEN
and V_NO_ETUDE = ETUDE_PATIENT.NO_ETUDE
and ETUDE_PATIENT.NO_PATIENT = PATIENT.NO_PATIENT;
begin
open curseur;
fetch curseur into V_SOMME;
V_NBPATIENT := V_NBPATIENT + 1;
exit when curseur%NOTFOUND;
update DROGUE_VARIANT
set INDICE_EFFICACITE_METABO_DV = V_SOMME/V_NBPATIENT
where exists(select * from ETUDE, DROGUE_VARIANT, ETUDE_PATIENT, PATIENT
where ETUDE.NO_DROGUE = DROGUE_VARIANT.NO_DROGUE
and ETUDE.NO_VAR_GEN = DROGUE_VARIANT.NO_VAR_GEN
and V_NO_ETUDE = ETUDE_PATIENT.NO_ETUDE
and ETUDE_PATIENT.NO_PATIENT = PATIENT.NO_PATIENT);
end SP_UPDATE_INDICE_METABO_DV;
/
Я получаю сообщение об ошибке: Процедура компиляции ошибка журнала проверки компилятора.
Но я не могу открыть журнал компилятора, и когда мой друг открывает его, он указывает на странные места, такие как мои таблицы создания и т. Д.
Это, кстати, школьный материал, так что будет хорошо, если вы сможете дать представление, а не прямое решение. Большое спасибо.
Спасибо за помощь за помощь!
Не должно быть петли где-то обрабатывать строки, извлеченные из курсора? –
Вы не сказали, в чем проблема. Вы получаете ошибку компиляции, ошибку времени выполнения, неправильные результаты? Почему вы делаете это в процедуре; почему бы просто не использовать агрегированную функцию 'avg()' в вашем запросе или непосредственно в инструкции обновления? –
Сообщите нам, что * не * работа поможет гораздо больше. Вы получаете ошибку компиляции? Неверные результаты? –