Перед вызовом процедуры необходимо убедиться, что она действительна. У вас все не так, Oracle выдает ошибку.
После того, как вы ее создали, вы получили сообщение:
Предупреждение: процедура создана с ошибками компиляции
Вы должны были проверить, что не так, выполнив команду
show err
Я переформатировал код, который вы разместили - посмотрите, как его легче читать:
create or replace procedure find_class(roll IN number) IS
tm number (10);
begin
select total_marks
into tm
from stud_marks
where name IN (select name
from result
where roll = roll_no
);
if (tm <= 1500 and tm >= 990)then
update result set
class = 'distin'
where roll_no = roll;
elsif (tm > 900 and tm < 989) then --> ELSIF, not ELSEIF
update result set
class = 'first'
where roll_no = roll;
elsif (tm <= 899 and tm >= 825) then --> ELSIF, not ELSEIF
update result set
class = 'second'
where roll_no = roll;
end if;
exception when no_data_found then
dbms_output.put_line('roll no is not matched with the entry');
end;
Очевидно, вы использовали ELSEIF
, в то время какэто должно быть ELSIF
. Я не знаю, единственная ли это ошибка, потому что у меня нет твоих таблиц - ты это выяснишь. Не забудьте show err
при необходимости!
Итак, когда он создан без ошибок, вы можете позвонить ему и посмотреть, что он делает.
PS Забыл упомянуть: почему выэто связано как SYS
? Этот пользователь владеет базой данных и должен не использоваться для разработки или образования . Вы должны использовать одного из предопределенных пользователей (например, Scott
или HR
) или создать своего собственного пользователя. Оставьте SYS
в покое.