Изменение и удаление объектов

Из PL/SQL блока вы можете модифицировать и удалять ряды в объектной таблице.

Пример 12-7 Изменение и удаление рядов в объектной таблице
DECLARE emp employee_typ; BEGIN INSERT INTO employee_tab VALUES (employee_typ(370, 'Robert', 'Myers', 'RMYERS','555.111.2277','07-NOV-04', 'SA_REP', 8800,.12, 101, 110, address_typ('540 Fillmore', 'San Francisco', 'CA', '94011')) ); UPDATE employee_tab e SET e.address.street = '1040 California' WHERE e.employee_id = 370; DELETE FROM employee_tab e WHERE e.employee_id = 310; END; /

Манипуляции объектами через Ref модификаторы

Вы можете использовать ссылки, используя функцию REF, аргументом которой является связанная переменная.

Пример 12-8 Изменение рядов о объектной таблице, используя REF модификатор.
DECLARE emp employee_typ; emp_ref REF employee_typ; BEGIN SELECT REF(e) INTO emp_ref FROM employee_tab e WHERE e.employee_id = 370; UPDATE employee_tab e SET e.address = address_typ('8701 College', 'Oakland', 'CA', '94321') WHERE REF(e) = emp_ref; END; /

Вы можете объявлять ссылки как переменные, параметры, поля или атрибуты. Вы можете использовать ссылки как выходные или выходные переменные в выражениях SQL.

Вы не можете использовать ссылки в PL/SQL. Например, присвоение в примере 12-9 с использованием ссылки не допустимо. Вместо ссылки используйте функцию DEREF или обратитесь к объекту через пакедж UTL_REF. Информацию о функции REF смотрите в "Oracle Database SQL Reference".

Пример 12-9 Использование DEREF в выражении SELECT INTO
DECLARE emp employee_typ; emp_ref REF employee_typ; emp_name VARCHAR2(50); BEGIN SELECT REF(e) INTO emp_ref FROM employee_tab e WHERE e.employee_id = 370; -- следующее присвоение вызовет исключение, такая операция не допустима в PL/SQL -- emp_name:= emp_ref.first_name || ' ' || emp_ref.last_name; -- emp:= DEREF(emp_ref); не допускается использование DEREF в процедурных выражениях SELECT DEREF(emp_ref) INTO emp FROM DUAL; -- использование пустой таблицы DUAL emp_name:= emp.first_name || ' ' || emp.last_name; DBMS_OUTPUT.PUT_LINE(emp_name); END; /
Информацию о функции DEREF смотрите в "Oracle Database SQL Reference".


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: