Ошибка компиляции при создании триггера уровня оператора - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь использовать триггер уровня оператора, а не триггер уровня строки.

Не могу понять, как заставить этот триггер работать без ошибок компиляции. Что-то супер очевидно, что я делаю не так? Я проверил оператор select, чтобы найти счетчик, и он отлично работает.

CREATE OR REPLACE TRIGGER bustaxi
AFTER INSERT ON BUS
DECLARE 
var_count NUMBER;
BEGIN

  var_count := (SELECT COUNT(L#)
  FROM (SELECT L# FROM BUS
  INTERSECT
  SELECT L# FROM TAXI));

  IF (var_count > 0) THEN
    RAISE_APPLICATION_ERROR(-29500, 'Already drives a taxi!');
  END IF;
END;
/

1 Ответ

0 голосов
/ 01 сентября 2018

Мне удалось заставить его работать. Оператор select работал отдельно, но при его использовании мне нужно было использовать оператор INTO. Кроме того, RAISE_APPLICATION_ERROR имеет число вне диапазона. Должен быть между -20000 и -20999.

CREATE OR REPLACE TRIGGER bustaxi
AFTER INSERT ON BUS
DECLARE 
var_count NUMBER;
BEGIN

  SELECT COUNT(L#) INTO var_count
  FROM (SELECT L# FROM BUS
  INTERSECT
  SELECT L# FROM TAXI);

  IF (var_count > 0) THEN
    RAISE_APPLICATION_ERROR(-20001, 'Already drives a taxi!');
  END IF;
END;
/
...