Относительно разделения приложений PL / SQL на несколько единиц - PullRequest
3 голосов
/ 17 февраля 2012

Вот мой рабочий процесс приложения.

У меня есть ref cursor, который заполнен всеми моими сотрудниками ID s..Это на самом деле просто идентификационный номер.

Но теперь я хочудля получения лота информации для каждого сотрудника ... (полученной из ref cursor). Это не просто данные, но также много вычисленных производных данных.Вид деривации, который проще сделать с помощью курсоров и процедур и т. Д. ...

Например, сумма всех временных интервалов, в течение которых сотрудник находился в отделе 78 ... (который могбыть просто один столбцов для каждого сотрудника).

Так что я думаю, что мог бы сделать это с действительно большим (по большому счету,Я имею в виду действительно сложный в обслуживании, трудный для понимания, трудный для оптимизации, сложный для повторного использования, рефакторинга ... и т. Д.) SQL-запрос, но на самом деле это не то, чем я бы занимался, если бы это не было последним средством.

Поэтому я пытаюсь найти способы использовать все возможности PL / SQL , чтобы разделить это на максимально возможное количество отдельных модулей (возможно, функций или процедур), чтобы иметь возможность справиться с этим.простым и элегантным способом ...

Я думаю, что какой-то способ объединения наборов данных (ref cursors, вероятно) решит мои проблемы ... Я смотрел некоторые вещи наинтернет до сих пор и некоторые вещи выглядели профессиональноmising, а именно конвейерная обработка ... Хотя я не совсем уверен, что это то, что мне нужно ..

Подводя итог, то, что я думаю мне нужно каким-то образомсоставить результирующую ref cursor (действительно большую таблицу, один столбец для ID и около 40 других столбцов, каждый из которых содержит определенный бит информации о владельце ID .), используя множество процедур, которые затем я могу отправить обратно в мое серверное приложение и разобраться с ним.(Экспорт в Excel в этом случае.)

Я действительно в растерянности .. Надеюсь, кто-то с большим опытом может помочь мне в этом.

FA

1 Ответ

1 голос
/ 19 февраля 2012

Я не уверен, что это то, что вы хотите, или как часто вам нужно запускать эту вещьНо так как это звучит очень тяжело, возможно, вам не нужно обновлять данные в эту секундуЕсли это один раз в день или меньше, вы можете создать таблицу с идентификаторами сотрудников,и использовать отдельные обновления MERGE для расчета различных полейЗатем приложение может получить данные из этой таблицы.Вы можете иметь работу, которая рассчитывает это каждый раз, когда вам нужны обновленные данные.Вы можете прочитать о команде слияния здесь wiki и специально для oracle здесь oracle .Поскольку вы используете отдельные команды, вы, конечно, можете делать это в разных процедурах, если это удобно.например:

begin
немедленно выполнить 'усеченная таблица temp_table';

вставить в temp_table выбрать emp_id из emps;

MERGE INTO temp_table a USING (выбрать имя)b on (a.emp_id = b.emp_id) ПРИ СООТВЕТСТВИИ С ПОТОМ ОБНОВЛЕНИЯ УСТАНОВИТЕ a.name = b.name;...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...