оракул не обрабатывает данные из запроса - PullRequest
1 голос
/ 13 ноября 2011

Я пишу триггер, чтобы проверить, распределен ли сотрудник на два перекрывающихся рейса.

Это было бы что-то вроде:

select flight_id from flight 
where arrival_time > :new.departure_time
and departure_time < :new.arrival_time;

if flight_id is empty 
  [do nothing]
if flight_id exists
  [raise application error]

Может ли кто-нибудь помочь мне в том, как мне пришлось бы там кодировать условную логику? Я впервые работаю с оракулом (университетская курсовая работа).

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011

SELECT ... INTO твой друг. Это вызовет исключение, вы его поймаете, ничего не сделаете, иначе и вызовете собственную ошибку.

select flight_id into v
from flight 
where arrival_time > :new.departure_time
and departure_time < :new.arrival_time;
raise_application_error(-20000, 'not good');
exception
when NO_DATA_FOUND
  then return 1
 when others
   then raise_application_error(-20011,'really good');
1 голос
/ 13 ноября 2011
DECLARE
   V_some_varible  NUMBER;
BEGIN
   Seclect 1 into v_some_varible from dual where 1 = 0;
EXCEPTION  -- exception handlers begin
   WHEN NO_DATA_FOUND THEN
      INSERT INTO errors (message) VALUES ('no data found');
   WHEN OTHERS THEN  -- handles all other errors
      ROLLBACK;
END;

Обратите внимание, что 1 = 0, чтобы вызвать исключение отсутствия данных.Этот пример должен работать в любой базе данных Oracle, за исключением вставки в таблицу ошибок.

...