Я написал оператор case, который получает текущий статус приложения, которое сделал пользователь; этот оператор срабатывает при срабатывании триггера при изменении статуса приложения-пользователя. Когда их статус становится «Принято», я хочу, чтобы таблица моих учеников обновляла строку, чтобы указать, что они находятся на месте.Oracle - встроенный метод UPDATE в операторе CASE
Я знаю, что метод работает, когда я тестировал его, возвращая 1 и 0 в предыдущей версии, но так как с помощью метода UPDATE мой триггер продолжает терпеть неудачу, как бы я включил вызов UPDATE в мой оператор case?
Дело код заявление:
SELECT DISTINCT CASE
WHEN get_status(:NEW.status_id) = LOWER('Applicant Accepted Offer')
THEN
UPDATE students
SET students.student_on_placement = 1
WHERE applications.student_id = :OLD.student_id;
END AS status_result
FROM status;
метод get_status (тоже избегать вопросов о моем методе)
CREATE OR REPLACE FUNCTION get_status(this_id NUMBER)
RETURN VARCHAR2
AS this_type status.status_type%TYPE;
BEGIN
SELECT status_type
INTO this_type
FROM status
WHERE status_id = this_id;
RETURN LOWER(this_type);
END get_status;
Благодаря Реза, я буду стараться, чтобы придумать способ, чтобы работать вокруг этого. – Alex
Кроме того, аналогичная проблема на SO: http://stackoverflow.com/questions/8729236/solution-to-cannot-perform-a-dml-operation-inside-a-query – RGO
Я думаю, что я попытаюсь создать переменную и затем установите его в 1 или 0 в операторе CASE, затем выполните операцию DML на основе ее значения, спасибо за вашу помощь :) – Alex