Сравнение записей в 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)