Что ж, вы можете обойти очевидную проблему самоссылки с заменяемыми типами, как показано ниже.
CREATE TYPE item_t
AS
OBJECT (
attr_a VARCHAR2 (30));
/
CREATE TYPE base_node_t
AS
OBJECT (
item item_t)
NOT FINAL
NOT INSTANTIABLE;
/
CREATE TYPE node_t
UNDER base_node_t (
next_node base_node_t);
/
DECLARE
nodes node_t :=
node_t (
item_t ( 'grandparent'),
node_t (
item_t ( 'parent'),
node_t (
item_t ( 'child'),
NULL)));
BEGIN
DBMS_OUTPUT.put_line (
XMLTYPE (nodes).getclobval (0, 2));
END;
/
<NODE_T>
<ITEM>
<ATTR_A>grandparent</ATTR_A>
</ITEM>
<NEXT_NODE>
<ITEM>
<ATTR_A>parent</ATTR_A>
</ITEM>
<NEXT_NODE>
<ITEM>
<ATTR_A>child</ATTR_A>
</ITEM>
<NEXT_NODE/>
</NEXT_NODE>
</NEXT_NODE>
</NODE_T>
Однако я не верю, что такие типы могут быть объявлены как типы данных столбцов и, следовательно, сохраняются в них непосредственно вреляционные таблицы (хотя косвенные методы, такие как внутри anydata или преобразованные в xml, будут работать).
Также я не использовал это в реальном сценарии, я не знаю, есть ли предел рекурсии или каккрепкий это вообще.