Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как создать экземпляр объекта с аtтрибутом ref? возможно ли это?  [new]
Kindness
Member

Откуда:
Сообщений: 3
можно ли создать объекты в памяти и ссылаться на них с помощью ref?
Подскажите, что не так в этом скрипте?

CREATE TYPE emp_person_typ AS OBJECT (
  name     VARCHAR2(30),
  manager  REF emp_person_typ );
/

declare
  e1 emp_person_typ := emp_person_typ ('John Smith', NULL);
  e2 emp_person_typ;
begin
  select emp_person_typ ('Bob Jones', ref(e2)) into e2 from dual;
end;

ORA-00932: несовместимые типы данных: ожидается emp_person_typ, получено куа emp_person_typ
/
2 май 10, 14:47    [8719416]     Ответить | Цитировать Сообщить модератору
 Re: Как создать экземпляр объекта с аtтрибутом ref? возможно ли это?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10043
Kindness
можно ли создать объекты в памяти и ссылаться на них с помощью ref?


You can't create/use REF in PL/SQL. REF always poins to persistent SQL object, not PL/SQL object:

SQL> CREATE TYPE emp_person_typ AS OBJECT (
  2    name     VARCHAR2(30),
  3    manager  REF emp_person_typ );
  4  /

Type created.

SQL> create table emp_person_tbl of emp_person_typ
  2  /

Table created.

SQL> insert
  2    into  emp_person_tbl
  3    values(
  4           'John Smith',
  5           NULL
  6          )
  7  /

1 row created.

SQL> insert
  2    into  emp_person_tbl
  3    select  'Bob Jones',
  4            ref(t)
  5      from  emp_person_tbl t
  6      where name = 'John Smith'
  7  /

1 row created.

SQL> select  *
  2    from  emp_person_tbl
  3  /

NAME
------------------------------
MANAGER
--------------------------------------------------------------------------------
John Smith


Bob Jones
0000220208BB07095C620E4D459A12755C76B49494F59D1E7CDD544E1C9E7086938624ED70


SQL> select  name,
  2          deref(manager)
  3    from  emp_person_tbl
  4  /

NAME
------------------------------
DEREF(MANAGER)(NAME, MANAGER)
--------------------------------------------------------------------------------
John Smith


Bob Jones
EMP_PERSON_TYP('John Smith', NULL)


SQL> select  name,
  2          deref(manager).name
  3    from  emp_person_tbl
  4  /

NAME                           DEREF(MANAGER).NAME
------------------------------ ------------------------------
John Smith
Bob Jones                      John Smith

SQL> 

SY.

Сообщение было отредактировано: 2 май 10, 16:43
2 май 10, 16:40    [8719523]     Ответить | Цитировать Сообщить модератору
 Re: Как создать экземпляр объекта с аtтрибутом ref? возможно ли это?  [new]
Kindness
Member

Откуда:
Сообщений: 3
Спасибо!! :)
2 май 10, 17:30    [8719567]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить