CREATE OR REPLACE TRIGGER allergy BEFORE INSERT ON
название таблицы здесь
FOR EACH ROW -- forgot this too
DECLARE
med VARCHAR2(20);
Вы действительно должны объявить это как% type.
med visit.medication%type;
BEGIN
SELECT v.medication RCD.specify
Требуется запятая между столбцами
INTO med
Для двух столбцов нужны две переменные
FROM visit v, relcondetails RCD
WHERE :new.medication = v.medication AND RCD.specifiy = 'allergies';
У вас нет условий соединения двух таблиц, это очень плохо. Этот запрос выполнит декартову шкалу между двумя таблицами, а затем вернет все из них, у которых есть «аллергии» и: new.medication в соответствующих столбцах.
вам также, вероятно, понадобится условие фильтра, чтобы ограничить запрос конкретным пациентом или конкретным посещением. Этот запрос сделает это для всех пациентов и всех их посещений в квадрате.
IF med = allergies THEN
Я не знаю, что / аллергии / есть в этом ЕСЛИ. Нет такой переменной, которая определена как таковая, и без кавычек это не строка.
RAISE_APPLICATION_ERROR(-20000, 'Patient Is alergic to this medication');
Это сообщение об ошибке подтверждает то, что я сказал по поводу вашего запроса. Вы думаете, что запрашиваете одного пациента, но это не так.
END IF;
END allergy;
Серьезно, если вы пишете программное обеспечение, чтобы уберечь человека от приема потенциально опасных для жизни лекарств, подумайте о другой сфере деятельности. Клянусь, я не говорю, что это грубо, но ваш пример кода почти не понимает язык pl / sql, sql или какой-либо кусочек программирования. Я думаю, что вы начали с некоторого примера кода и пытались изменить его во что-то. Но ты действительно остался с тарабарщиной. Я начинаю думать, что это домашнее задание.