DECLARE
CURRENT_BOOK_REF REF BOOK_T;
BEGIN
SELECT REF(B)
INTO CURRENT_BOOK_REF
FROM BOOK_S B WHERE ID = 10;
END;
Операция DEREF(ссылка) возвращает исходный объект по заданной
на него ссылке. Продолжим предыдущий пример, в котором обновим
значение атрибута TITLE у объекта, выбранного по ссылке:
DECLARE
CURRENT_BOOK_REF REF BOOK_T;
CURRENT_BOOK BOOK_T;
BEGIN
SELECT REF(B)
INTO CURRENT_BOOK_REF
FROM BOOK_S B WHERE ID = 10;
SELECT DEREF(CURRENT_BOOK_REF)
INTO CURRENT_BOOK FROM DUAL;
CURRENT_BOOK.TITLE := 'Анна Каренина';
END;
Если объект, на который указывает REF, удален, то ссылку называют
висячей
(dangling), поскольку теперь она указывает на несуществующий
объект. Использовать операцию DEREF для висячей ссылки нельзя. Что-
бы проверить, не является ли ссылка висячей, применяется предикат IS
DANGLING. Все рассмотренные операции (VALUE, REF, DEREF и IS
DANGLING) можно использовать только в SQL-операторах. В проце-
дурных операторах это запрещено.
В операторах INSERT и UPDATE используется конструкция – RE-
TURNING. Она применяется для считывания информации из вновь вве-
денной или обновленной строки; при этом формировать дополнительный
запрос не требуется. Синтаксис конструкции RETURNING таков:
RETURNING список_выбора INTO список_ввода;
где список_выбора аналогичен списку выбора запроса, а список_ввода
–
это то же самое, что и оборот INTO запроса. Например, если в объект-
ную таблицу вводится некоторый объект, то можно вернуть ссылку на
вновь вводимый объект следующим образом:
DECLARE
CURRENT_BOOK_REF REF BOOK_T;
BEGIN
193
INSERT INTO BOOK_S
B VALUES
(BOOK_T(40, 'Игрок', 'Достоевский Ф.', 3000))
RETURNING REF(B) INTO CURRENT_BOOK_REF ;
END;
Достарыңызбен бөлісу: