Я получаю эту ошибку при попытке удалить строку в представлении
" ORA-01732: операция с данными недопустима в этом представлении "
Команда SQL выдана
DELETE FROM RegisterHelper
WHERE StudentID = 111111111 AND CourseID = 'ASD123';
Это создает ошибки. Я дважды проверил, что эти значения существуют.
Мой взгляд
CREATE VIEW RegisterHelper AS
SELECT studentId, courseID, NULL as position, 'registered' AS status
FROM registeredOn
UNION
SELECT studentId, courseID, position, 'waiting' AS status
FROM waitingOn;
В этом представлении создается полный список ожидающих и зарегистрированных студентов на всех курсах вместе с их статусом (который используется в триггере). Все данные, приведенные здесь, важны для триггера.
Триггер
CREATE OR REPLACE TRIGGER CourseUnregistration
INSTEAD OF DELETE ON RegisterHelper
etc
Таблицы следующие
CREATE TABLE RegisteredOn (
StudentID REFERENCES Student(StudentID) NOT NULL,
CourseID REFERENCES Course(CourseID) NOT NULL
);
CREATE TABLE WaitingOn (
StudentID REFERENCES Student(StudentID) NOT NULL,
CourseID REFERENCES Course(CourseID) NOT NULL,
Position INT NOT NULL,
PRIMARY KEY(StudentID, CourseID)
);
Поскольку я удаляю только из таблиц со ссылочными значениями, не будет проблем с удалением значений с ссылками (очевидно) - это не должно создавать проблем.
Интересно то, что на самом деле это сработало, выполнив команду DELETE в представлении RegisterHelper несколько часов назад. По какой-то причине он перестал работать, и я не помню, чтобы менял его.
Причина, по которой триггер существует в представлении RegisterHelper, заключается в том, что учащиеся вставляются и удаляются в таблицах RegisteredOn и WaitingOn. Вставки работает нормально, удаление - нет, так как я получаю сообщение об ошибке.
Проще говоря, я просто хочу, чтобы триггер работал, когда что-то удаляется в таблицах RegisteredOn или WaitingOn. Если у кого-то есть другое решение, я открыт для него.