- 0
Oracle PLSQL объекты - как получить указатель на объект
Добрый день. У меня довольно сложная иерархия типов, и столкнулся со следующей ерундой: похоже, при присвоении одного объекта другому, оракл копирует объект. А я хочу, чтобы он присваивал по ссылке.
Для наглядности, пример:
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? Если хотите посоветовать почитать про NOCOPY и REF - то, пожалуйста, с примером: ибо, похоже, оно про другое. NOCOPY работает для in out параметров, а REF DEREF - для хранящихся в таблицах даных (если не ошибаюсь)
2 ответа:
-
- 0
вы лучше конец задачи объясните. У меня с ораклом опыта более 4лет. Я постораюсь помоч
-
- 0
Задача - построить в PL\SQL дерево объектов, и осуществлять его обход. Задача - сделать это без табличек, ибо критична производительность.
Стало быть, при создании узла, надо передавать ему указатель на родителя. Передаю его in out nocopy - или даже просто in - вроде все нормально, но когда выполняется parent := in_parent - начинаются, (с определенного момента), страшные тормоза: судя по примеру выше, у КАЖДОГО нода получается по экземпляру всего дерева практически:) - т.е. при присвоении, объект копируется.
Вот такие дела. Опыт работы с ораклом у меня с 2004 года тоже, а вот ответа на этот вопрос, как оказалось, не знаю :(