Пытался создать дерево на pl/sql (Oracle), но возникла такая трудность: при присваивании одного объекта другому он похоже присваивает не ссылку на объект, а создает копию первого. Таким образом получается, что каждый элемент дерева вместо ссылки на родителя содержит в себе другого идентичного родителя с идентичным деревом, что сильно замедляет процесс и съедает много памяти.
Для наглядности, пусть имеем тип:
CREATE OR REPLACE TYPE t_test AS OBJECT
(
id NUMBER
);
Тогда следующий код:
DECLARE
t1 t_test;
t2 t_test;
BEGIN
t1 := new t_test(1);
t2 := t1;
out(t1.id || t2.id);
t2.id := 2;
out(t1.id || t2.id);
END;
выдает:
11
12
Может кто-нибудь знает, как переменной t2 присвоить указатель на t1, чтобы при изменении t2 менялись также параметры t1?
Это не совсем то, что нужно. Условно говоря мне необходимо решить задачу — получить две переменные, указывающие на одну область памяти. Если использовать функцию с параметром IN OUT NOCOPY то ссылка будет передаваться в функцию, но при присвоении такого параметра другой переменной опять произойдет копирование объекта.
Если я правильно понял, то REF может указывать только на объект, находящийся в таблице, так как такой указатель содержит в себе название таблицы и идентфикатор строки в ней, соответствующей объекту. Указатель на переменную через REF получить нельзя, а значит и в создании дерева использовать его не получится.