romutis
Guest
tony2001
Ок, попытаюсь сказать что-нить содержательное.
Что NESTED TABLE, что VARRAY - оба являются _переменными_ и работа с ними идет именно как с переменными - т.е. присвоение значений, но не DML-операции. Разница между NESTED TABLE и VARRAY лишь в том, что VARRAY имеет ограничение по размеру (размер задается при создании), а NESTED TABLE - полностью динамическая. Соотв. методы .EXTEND, .TRIM, .DELETE не оказывают влияния на объекты типа VARRAY.
Теперь о БД. И те и другие объекты можно хранить в таблицах в виде столбца-указателя на объект. Оба объявляются как столбец объявленного типа:
CREATE OR REPLACE TYPE my_varray as varray(20) of varchar2(2000);
CREATE OR REPLACE TYPE my_table as table of varchar2(2000);
CREATE TABLE TEST (
IND number not null,
column_varray my_varray,
column_table my_table)
NESTED TABLE column_table store as column_table;
Вот здесь будет работать SELECT/INSERT/UPDATE/DELETE для таблицы TEST - но вы не сможете сделать UPDATE/INSERT/DELETE для отдельных элементов столбцов column_varray или column_table в отдельности от. Всё, что можно - это считать все значения этих столбцов куда-нибудь, изменить значения (помним, что это переменная, да?) и записать обратно.
Вот такая скучная матчасть получилась...
Я активно пользую оба вида этих COLLECTIONS, но только не для того, чтобы их в базе хранить - ИМХО, изврат. В версии 10g должна быть поулучшена работа с COLLECTIONS - но я "десятку" видел лишь на бета-тестировании, поэтому работал с ней лишь по вершкам.
P.S. Примеры и мнение, основанное на личном PL/SQL опыте нужны?
Ок, попытаюсь сказать что-нить содержательное.
Что NESTED TABLE, что VARRAY - оба являются _переменными_ и работа с ними идет именно как с переменными - т.е. присвоение значений, но не DML-операции. Разница между NESTED TABLE и VARRAY лишь в том, что VARRAY имеет ограничение по размеру (размер задается при создании), а NESTED TABLE - полностью динамическая. Соотв. методы .EXTEND, .TRIM, .DELETE не оказывают влияния на объекты типа VARRAY.
Теперь о БД. И те и другие объекты можно хранить в таблицах в виде столбца-указателя на объект. Оба объявляются как столбец объявленного типа:
CREATE OR REPLACE TYPE my_varray as varray(20) of varchar2(2000);
CREATE OR REPLACE TYPE my_table as table of varchar2(2000);
CREATE TABLE TEST (
IND number not null,
column_varray my_varray,
column_table my_table)
NESTED TABLE column_table store as column_table;
Вот здесь будет работать SELECT/INSERT/UPDATE/DELETE для таблицы TEST - но вы не сможете сделать UPDATE/INSERT/DELETE для отдельных элементов столбцов column_varray или column_table в отдельности от. Всё, что можно - это считать все значения этих столбцов куда-нибудь, изменить значения (помним, что это переменная, да?) и записать обратно.
Вот такая скучная матчасть получилась...
Я активно пользую оба вида этих COLLECTIONS, но только не для того, чтобы их в базе хранить - ИМХО, изврат. В версии 10g должна быть поулучшена работа с COLLECTIONS - но я "десятку" видел лишь на бета-тестировании, поэтому работал с ней лишь по вершкам.
P.S. Примеры и мнение, основанное на личном PL/SQL опыте нужны?