Из 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".