Comments 9
Зачет! Времени на это ушло, наверное, много…
Небольшие дополнения/правки от меня:
Небольшие дополнения/правки от меня:
- «Использование в SQL»: ассоциативные в 12c уже могут биндиться в SQL из PL/SQL если index by PLS_INTEGER:
Link1
Link2
- Мне кажется, что надо уточнить то, что вы имели ввиду под "Не поддерживает DML-операции" у ассоциативных массивов. Я бы лучше сказал, что ассоциативные массивы, в отличие от varray и nested table, не могут храниться в таблицах.
- У VARRAY метод DELETE() существует, но нет методов delete(m), delete(m,n)
- «Индекс не может принимать значение null» — зато может принимать пустой литерал ''
- «Процедура DBMS_SESSION.FREE_UNUSED_USER_MEMORY возвращает неиспользуемую более память системе» — не сразу и еще может быть полезно
Привет!
Спасибо за комменты и ссылки, немного подправил статью по ним.
В наших лекциях материал актуален для версии 11.2 – именно такая версия у нас на продуктиве и в ближайшие как минимум пару лет вряд ли будем апгрейдить. Возможно, позже запишем несколько презентаций по нововведениям версии 12с (заодно и сами ознакомимся).
По поводу «не поддерживает dml операции» — это фраза из документации «Cannot be manipulated with DML statements» :)
Про метод Delete у varray – отличное замечание, спасибо! Поправил в статье.
С пустой строкой в качестве индекса – тоже интересная деталь. Добавил в статью.
А инфа про процедуру DBMS_SESSION.FREE_UNUSED_USER_MEMORY добавлена в статью «факультативно». Тема с памятью (выделение/освобождение) уже ближе к админству и конкретно для меня туманна.В наших первых лекциях материал пока не настолько глубокий, чтобы в эту тему нырять. Может в будущем попробуем разобраться в вопросе.
Спасибо за комменты и ссылки, немного подправил статью по ним.
В наших лекциях материал актуален для версии 11.2 – именно такая версия у нас на продуктиве и в ближайшие как минимум пару лет вряд ли будем апгрейдить. Возможно, позже запишем несколько презентаций по нововведениям версии 12с (заодно и сами ознакомимся).
По поводу «не поддерживает dml операции» — это фраза из документации «Cannot be manipulated with DML statements» :)
Про метод Delete у varray – отличное замечание, спасибо! Поправил в статье.
С пустой строкой в качестве индекса – тоже интересная деталь. Добавил в статью.
А инфа про процедуру DBMS_SESSION.FREE_UNUSED_USER_MEMORY добавлена в статью «факультативно». Тема с памятью (выделение/освобождение) уже ближе к админству и конкретно для меня туманна.В наших первых лекциях материал пока не настолько глубокий, чтобы в эту тему нырять. Может в будущем попробуем разобраться в вопросе.
Еще насчет column_value: все-таки для унификации желательнее использовать value(), тогда легко и однотипно можно работать с конкретным возвращаемым типом. Пример:
declare
cursor c1 is SELECT value(t) x FROM TABLE(ku$_objnumset(1)) t;
cursor c2 is SELECT value(t) x FROM TABLE(ku$_objnumpairlist(ku$_objnumpair(10,20))) t;
begin
for r in c1 loop
dbms_output.put_line(r.x);
end loop;
for r in c2 loop
dbms_output.put_line(r.x.num1);
end loop;
end;
.
Ещё про нюансы forall я тут писал: habrahabr.ru/post/125893/
UFO just landed and posted this here
«THE» был deprecated еще в 9i: docs.oracle.com/cd/A91202_01/901_doc/server.901/a90120/ch4_dep.htm#6669
Хотя он еще и работает для совместимости
Use of «THE (subquery)» Expression
In releases prior to Oracle8, the table_collection_expression clause was expressed as «THE (subquery)». That usage is desupported.
Хотя он еще и работает для совместимости
Кстати, очень показателен EXPAND_SQL для запроса с THE:
Исходный:
После трансформации:
Исходный:
select value(c) x, the(select dummy from dual) x2 from the(select ku$_vcnt('RED2', 'GREEN2', 'BLUE2') x3 from dual) c
После трансформации:
SELECT "A1"."COLUMN_VALUE" "X"
,(SELECT "A3"."DUMMY" "DUMMY" FROM "SYS"."DUAL" "A3") "X2"
FROM (
SELECT VALUE(A4) "COLUMN_VALUE"
FROM TABLE(
(
SELECT "KU$_VCNT"('RED2','GREEN2','BLUE2') "X3"
FROM "SYS"."DUAL" "A2"
)
) "A4"
) "A1"
Sign up to leave a comment.
Все о коллекциях в Oracle