По этой причине я новичок в PL/SQL, извините за простой вопрос. Надеюсь, вы мне поможете.
Моя цель - добавить значения в таблицу с помощью цикла for. Если у вас есть вопрос, пожалуйста, повторите, я отвечу, как только это будет возможно. Это мой код, который не работает.
declare
cursor c_exam_info is select result1 from exam_info;
begin
for i IN c_exam_info
loop
if result1>60 then
insert into exam_info(result1) values('pass');
else
insert into exam_info(result1) values('fail');
end if;
end loop;
end;
Почему вы вставляете новые записи, заполняя тот же столбец, что и запрос, и ничего больше? Не лучше ли было бы обновить эти записи? Возможно обновление другого столбца, например. pass_fail? И включить ключевой столбец в курсор, чтобы вы знали, какие студенты сдают или не сдают экзамены?





Учитывая, что столбец result1 выглядит как полностью вычисляемые данные, я мог бы даже порекомендовать вам просто использовать представление:
CREATE VIEW your_view AS (
SELECT t.*,
CASE WHEN t.result1 > 60 THEN 'pass' ELSE 'fail' END AS result1
FROM exam_info t
)
Затем выберите из этого представления всякий раз, когда вы хотите использовать вычисляемый столбец. Вычисленные/полученные данные, как правило, не должны храниться в ваших таблицах SQL, а также вам следует избегать использования курсоров, поскольку операции с базой данных уже заданы на основе.
Мой дорогой друг, я просто хочу написать этот код с помощью курсора.
Я не могу просматривать изображения.
В любом случае: INSERT кажется неуместным — не будет ли UPDATE лучшим выбором? Что-то вроде этого:
begin
for i IN (select id, result1 from exam_info) loop
update exam_info set
result_type = case when c_exam_info.result1 > 60 then 'pass'
else 'fail'
end
where id = c_exam_info.id;
end loop;
end;
Хотя то же самое можно сделать на уровне SQL, вам не нужен PL/SQL (если только это не домашнее задание, поэтому вы практикуете PL/SQL).
update exam_info set
result_type = case when c_exam_info.result1 > 60 then 'pass'
else 'fail'
end;
Нет особого смысла обновлять (или даже вставлять) тот же столбец со строкой («неудачно» или «пройдено»), если этот столбец (result1) является числом (например, 60). Кроме того, что это за таблица - с одним столбцом; какая польза от такого INSERT (того, который вы написали в своем коде)?
Пожалуйста, добавьте больше информации, что вы подразумеваете под «не работает». Не удается скомпилировать? Выдает ошибку при запуске? Дал ли он результат, отличный от ожидаемого? Четко укажите, что происходит, что вы ожидали вместо этого, полные сообщения об ошибках и т. д.