powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Движки SQL и PL
6 сообщений из 31, страница 2 из 2
Движки SQL и PL
    #39467038
Фотография Banks Analytics
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot мегамозг]Подскажите, в коде из статьи
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE PROCEDURE upd_for_dept (
dept_in IN employee.department_id%TYPE
,newsal_in IN employee.salary%TYPE)
IS
deptlist id_list;
BEGIN
SELECT employee_id
BULK COLLECT INTO deptlist
FROM employee WHERE department_id = dept_in;


данные засовываются в какую-то коллекцию типа id_list.
Что это за тип должен быть, вложенная таблица или что-то иное?
Код: plsql
1.
2.
3.
create type id_list is table of employee.employee_id%type;[/quot]

Тоже обратил на это внимание. И да, думаю что данные за ранее засунули в ассоциированный массив с типом PLS_INTEGER. Само название "id_list" как бы говорит за себя что подразумеваются столбец ID, а далее [SRC PLSQL]SELECT employee_id INTO deptlist

это подтверждает.
То есть за ранее создали пакет и объявили типы для наиболее часто встречающихся массивов: даты, id и т.п.

Вот рекомендация из книги Стивена Фейерштейна и Билла Прибыл:
Вместо того чтобы создавать набор определений TYPE коллекций, различающихся только по имени и разбросанных по всему приложению, стоит рассмотреть возможность создания одного пакета с набором заранее определенных, стандартных типов коллекций.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39467062
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Banks Analytics
Вот рекомендация из книги Стивена Фейерштейна и Билла Прибыл:
Вместо того чтобы создавать набор определений TYPE коллекций, различающихся только по имени и разбросанных по всему приложению, стоит рассмотреть возможность создания одного пакета с набором заранее определенных, стандартных типов коллекций.
вместо того чтоб каждый создавал пакет, стоит создать стандартные типы коллекций на уровне оракля

.....
stax
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39467111
Фотография мегамозг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintмегамозг,
через pipelined функцию использовать pl\sql пакеты можно. там создадутся sql типы автоматически (до версии 12с).
в 12с может быть и так можно. не знаю - не проверял.
Я в курсе, ч-з конвейрную ф-ю и сделал.
Теоретический интерес - как с обычными табличными функциями дела делать.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39467115
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мегамозгVintмегамозг,
через pipelined функцию использовать pl\sql пакеты можно. там создадутся sql типы автоматически (до версии 12с).
в 12с может быть и так можно. не знаю - не проверял.
Я в курсе, ч-з конвейрную ф-ю и сделал.
Теоретический интерес - как с обычными табличными функциями дела делать.
создавать sql тип (или пользовать существующие)

.....
stax
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39467178
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopИтак, пути загрузки
1) insert all, но надо позаботиться о de-duplication для всех измерений. Для этого можно для каждого из измерений поддерживать ассоциативный массив ключей и делать вставку для измерения, только если ключа в массиве еще нет.
2) insert all + row_number для каждого из измерений. Требует N аналитических сортировок. Вставка в соответствующее измерение если rn = 1 для него.
3) insert into fact + N insert distinct into dimension. Трубует N сканирований исходной широкой таблицы и N hash/sort для distinct.
4) unpivot так чтобы для фактов и всех измерений была отдельная одна строка + distinct.


1а) буфер в PL/SQL с заполнением из курсора bulk collect limit на ~1000-10000 строк + N ассоциативных массивов ключей.
Вставка буфера forall, измерения - по тексту.
Позволяет минимизировать переключения контекста.

1б) Если система позволяет жесткий parallel - тут, кмк, можно рассмотреть вариант insert из pipelined parallel enabled, внутри которой автономками заполнять измерения на базе тех же ассоциативных массивов, но надо аккуратно подойти к вопросу дублей в измерениях - инстансы parallel pipelined, разумеется, друг друга не видят.
Плюс важно не свалиться в temp, поскольку выход pipelined будет буферизоваться.
...
Рейтинг: 0 / 0
Движки SQL и PL
    #39467619
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousизмерения - по текстуНе понял этого момента.
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Движки SQL и PL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]