›  ›  ›  › Сравнение записей в PL/SQL Oracle

Сравнение записей в PL/SQL Oracle

Как узнать, равны ли две записи, то есть совпадают ли их соответствующие поля? Было бы неплохо, если бы PL/SQL позволял выполнять непосредственное сравнение. Например:

DECLARE
   first_book summer.reading_list_rt := summer.must_read;
   second_book summer.reading_list_rt := summer.wifes_favorite;
BEGIN
   IF first_book = second_book /* НЕ ПОДДЕРЖИВАЕТСЯ! */
   THEN
      lots_to_talk_about;
   END IF;
END;

К сожалению, это невозможно. Чтобы сравнить две записи, вам придется написать код для сравнения всех их полей по отдельности. Если количество полей невелико, сделать это довольно просто. Например, в случае записей из предыдущего примера сравнение выполняется следующим образом:

DECLARE
   first_book summer.reading_list_rt := summer.must_read;
   second_book summer.reading_list_rt := summer.wifes_favorite;
BEGIN
   IF  first_book.favorite_author = second_book.favorite_author
      AND first_book.title = second_book.title
      AND first_book.finish_by = second_book.finish_by
   THEN
      lots_to_talk_about;
   END IF;
END;

Однако здесь возникает одна проблема. Если вы хотите указать, что две записи со значениями NULL должны считаться равными, оператор сравнения необходимо изменить следующим образом:

(first_book.favorite_author = second_book.favorite_author
   OR( first_book.favorite_author IS NULL AND
       second_book.favorite_author IS NULL)

Метки: , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован.