Вставить значения в таблицу в PL/SQL

По этой причине я новичок в 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;

это мой стол

Пожалуйста, добавьте больше информации, что вы подразумеваете под «не работает». Не удается скомпилировать? Выдает ошибку при запуске? Дал ли он результат, отличный от ожидаемого? Четко укажите, что происходит, что вы ожидали вместо этого, полные сообщения об ошибках и т. д.

Codo 21.03.2019 08:01

Почему вы вставляете новые записи, заполняя тот же столбец, что и запрос, и ничего больше? Не лучше ли было бы обновить эти записи? Возможно обновление другого столбца, например. pass_fail? И включить ключевой столбец в курсор, чтобы вы знали, какие студенты сдают или не сдают экзамены?

APC 21.03.2019 12:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
124
2

Ответы 2

Учитывая, что столбец 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, а также вам следует избегать использования курсоров, поскольку операции с базой данных уже заданы на основе.

Мой дорогой друг, я просто хочу написать этот код с помощью курсора.

Rauf Ehmedov 21.03.2019 07:48

Я не могу просматривать изображения.

В любом случае: 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 (того, который вы написали в своем коде)?

Другие вопросы по теме