Коллекции

GlukOza
Дата: 12.12.2007 18:10:33
Есть таблица, созданая на основе объектного типа, приблизительно так:

CREATE OR REPLACE 
type net_rec is object (
        name varchar2(10),
        trunks T_trunks);

CREATE OR REPLACE 
type T_trunk_rec is object (
        address     varchar2(16),
        fallouts    t_fallouts,
    );

CREATE OR REPLACE 
type T_fallout is object (
		code     varchar2(100),
		msg      varchar2(512)
	);

CREATE OR REPLACE type t_fallouts is table of T_fallout;
CREATE OR REPLACE type t_trunks is table of T_trunk_rec;

CREATE TABLE temp
OF NET_REC
OBJECT IDENTIFIER IS SYSTEM GENERATED
/




Подскажите как обновлять поле fallouts в trunks таблицы .
Например, очистить все поля из fallouts.

Спасибо
ERROR MESSAGE
Дата: 12.12.2007 18:50:55
Это ты так все сделала, чтобы запутать и себя, и шпионов, засланных врагами? ))
Ты представляешь каково с этим будет работать тебе, твоим коллегам, да и Ораклу тоже?
Или у вас там в "Будущем" как раз только так и работают? )))))

P.S. Расскажи смысл такого нагромождения. Просто любопытно.
Oleg M.Ivanov
Дата: 12.12.2007 18:54:00
Тут очень неплохая дока, советую почитать.
GlukOza
Дата: 12.12.2007 18:54:02
ERROR MESSAGE
Это ты так все сделала, чтобы запутать и себя, и шпионов, засланных врагами? ))
Ты представляешь каково с этим будет работать тебе, твоим коллегам, да и Ораклу тоже?
Или у вас там в "Будущем" как раз только так и работают? )))))

P.S. Расскажи смысл такого нагромождения. Просто любопытно.


Данные выгружаются с excel таблиц, их много.
Придумала не я. У меня такая задача.
_Alex_SMIRNOV_
Дата: 12.12.2007 19:17:28
SimonInBlues
Дата: 12.12.2007 21:16:36
RTFM Update

Пример из документации:
CREATE TABLE people_demo1 OF people_typ;
CREATE TABLE people_demo2 OF people_typ;
UPDATE people_demo1 p SET VALUE(p) =
(SELECT VALUE(q) FROM people_demo2 q
WHERE p.department_id = q.department_id)
WHERE p.department_id = 10;
xymbo
Дата: 12.12.2007 23:30:07
GlukOza

Подскажите как обновлять поле fallouts в trunks таблицы .
Например, очистить все поля из fallouts.

Спасибо

А что это за таблица trunks?У Вас есть коллекция t_trunks, но не таблица.
GlukOza
Дата: 13.12.2007 00:19:03
xymbo
GlukOza

Подскажите как обновлять поле fallouts в trunks таблицы .
Например, очистить все поля из fallouts.

Спасибо

А что это за таблица trunks?У Вас есть коллекция t_trunks, но не таблица.


Мне надо обновить fallouts внутри T_trunk_rec. А точнее - обналить.
SY
Дата: 13.12.2007 04:33:45
GlukOza
Мне надо обновить fallouts внутри T_trunk_rec. А точнее - обналить.


SQL> DROP TABLE temp
  2  /

Table dropped.

SQL> DROP TYPE net_rec
  2  /

Type dropped.

SQL> DROP TYPE t_trunks
  2  /

Type dropped.

SQL> DROP TYPE T_trunk_rec
  2  /

Type dropped.

SQL> DROP TYPE t_fallouts
  2  /

Type dropped.

SQL> CREATE OR REPLACE 
  2  type T_fallout is object (
  3    code     varchar2(100),
  4    msg      varchar2(512)
  5   );
  6  /

Type created.

SQL> CREATE OR REPLACE type t_fallouts is table of T_fallout;
  2  /

Type created.

SQL> CREATE OR REPLACE 
  2  type T_trunk_rec is object (
  3          address     varchar2(36),
  4          fallouts    t_fallouts
  5      );
  6  /

Type created.

SQL> CREATE OR REPLACE type t_trunks is table of T_trunk_rec;
  2  /

Type created.

SQL> CREATE OR REPLACE 
  2  type net_rec is object (
  3          name varchar2(10),
  4          trunks T_trunks);
  5  /

Type created.

SQL> CREATE TABLE temp
  2  OF NET_REC
  3  OBJECT IDENTIFIER IS SYSTEM GENERATED
  4  NESTED TABLE trunks STORE AS trunks_tab
  5  (NESTED TABLE fallouts STORE AS fallouts_tab)
  6  /

Table created.

SQL> INSERT
  2    INTO temp
  3    VALUES(
  4           'GlukOza',
  5           T_trunks(
  6                    T_trunk_rec(
  7                                'Visitor from the future',
  8                                t_fallouts(
  9                                           T_fallout(
 10                                                     'R',
 11                                                     'Code red'
 12                                                    ),
 13                                           T_fallout(
 14                                                     'B',
 15                                                     'Code blue'
 16                                                    )
 17                                          )
 18                               ),
 19                    T_trunk_rec(
 20                                'Visitor from the past',
 21                                t_fallouts(
 22                                           T_fallout(
 23                                                     'R',
 24                                                     'Code red'
 25                                                    ),
 26                                           T_fallout(
 27                                                     'B',
 28                                                     'Code blue'
 29                                                    )
 30                                          )
 31                               )
 32                   )
 33         )
 34  /

1 row created.

SQL> INSERT
  2    INTO temp
  3    VALUES(
  4           'GlukOza',
  5           T_trunks(
  6                    T_trunk_rec(
  7                                'Visitor from the future',
  8                                t_fallouts(
  9                                           T_fallout(
 10                                                     'R',
 11                                                     'Code red'
 12                                                    ),
 13                                           T_fallout(
 14                                                     'B',
 15                                                     'Code blue'
 16                                                    )
 17                                          )
 18                               ),
 19                    T_trunk_rec(
 20                                'Visitor from the past',
 21                                t_fallouts(
 22                                           T_fallout(
 23                                                     'R',
 24                                                     'Code red'
 25                                                    ),
 26                                           T_fallout(
 27                                                     'B',
 28                                                     'Code blue'
 29                                                    )
 30                                          )
 31                               )
 32                   )
 33         )
 34  /

1 row created.

SQL> COMMIT
  2  /

Commit complete.

SQL> SELECT  *
  2    FROM  temp
  3  /

NAME
----------
TRUNKS(ADDRESS, FALLOUTS(CODE, MSG))
--------------------------------------------------------------------------------
GlukOza
T_TRUNKS(T_TRUNK_REC('Visitor from the future', T_FALLOUTS(T_FALLOUT('R', 'Code
red'), T_FALLOUT('B', 'Code blue'))), T_TRUNK_REC('Visitor from the past', T_FAL
LOUTS(T_FALLOUT('R', 'Code red'), T_FALLOUT('B', 'Code blue'))))

GlukOza
T_TRUNKS(T_TRUNK_REC('Visitor from the future', T_FALLOUTS(T_FALLOUT('R', 'Code
red'), T_FALLOUT('B', 'Code blue'))), T_TRUNK_REC('Visitor from the past', T_FAL
LOUTS(T_FALLOUT('R', 'Code red'), T_FALLOUT('B', 'Code blue'))))

NAME
----------
TRUNKS(ADDRESS, FALLOUTS(CODE, MSG))
--------------------------------------------------------------------------------


SQL> UPDATE  temp t1
  2    SET   trunks = CAST(
  3                        MULTISET(
  4                                 SELECT  T_trunk_rec(t3.address,null)
  5                                   FROM  temp t2,
  6                                   TABLE(t2.trunks) t3
  7                                   WHERE t2.rowid = t1.rowid
  8                                )
  9                        AS t_trunks
 10                       )
 11  /

2 rows updated.

SQL> SELECT  *
  2    FROM  temp
  3  /

NAME
----------
TRUNKS(ADDRESS, FALLOUTS(CODE, MSG))
--------------------------------------------------------------------------------
GlukOza
T_TRUNKS(T_TRUNK_REC('Visitor from the future', NULL), T_TRUNK_REC('Visitor from
 the past', NULL))

GlukOza
T_TRUNKS(T_TRUNK_REC('Visitor from the future', NULL), T_TRUNK_REC('Visitor from
 the past', NULL))


SQL> ROLLBACK
  2  /

Rollback complete.

SQL> 

SY.
нужно было что нить почитать во
Дата: 13.12.2007 15:08:15
GlukOza
Есть таблица, созданая на основе объектного типа, приблизительно так:

CREATE OR REPLACE 
type net_rec is object (
        name varchar2(10),
        trunks T_trunks);

CREATE OR REPLACE 
type T_trunk_rec is object (
        address     varchar2(16),
        fallouts    t_fallouts,
    );

CREATE OR REPLACE 
type T_fallout is object (
		code     varchar2(100),
		msg      varchar2(512)
	);

CREATE OR REPLACE type t_fallouts is table of T_fallout;
CREATE OR REPLACE type t_trunks is table of T_trunk_rec;

CREATE TABLE temp
OF NET_REC
OBJECT IDENTIFIER IS SYSTEM GENERATED
/




Подскажите как обновлять поле fallouts в trunks таблицы .
Например, очистить все поля из fallouts.

Спасибо


fallouts.delete; - удалит все элементы коллекции