Найдено результатов: 2

Лучший способ инкапсулировать сложную логику курсора Oracle PL/SQL в виде представления?

Я написал код PL/SQL для денормализации таблицы в форму much-easer-to-query. Код использует временную таблицу для выполнения некоторой части своей работы, объединяя некоторые строки из исходной таблицы вместе.

Логика записывается как конвейерная табличная функция, следуя шаблону из связанной статьи. Табличная функция использует объявление PRAGMA AUTONOMOUS_TRANSACTION для разрешения временного манипулирования таблицей, а также принимает входной параметр курсора, чтобы ограничить денормализацию определенными значениями ID.

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

Мой вопрос: действительно ли все это необходимо? Неужели я совершенно упустил из виду гораздо более простой способ сделать то же самое?

Каждый раз, когда я касаюсь PL / SQL, у меня создается впечатление, что я печатаю слишком много.

Обновление: я добавлю эскиз таблицы, с которой имею дело, чтобы дать всем представление о денормализации, о которой я говорю. В таблице хранится история заданий сотрудников, каждое из которых содержит строку активации и (возможно) строку завершения. У сотрудника может быть несколько одновременных заданий, а также одна и та же работа снова и снова в несмежных диапазонах дат. Например:

| EMP_ID | JOB_ID | STATUS | EFF_DATE    | other columns...
|      1 |     10 | A      | 10-JAN-2008 |
|      2 |     11 | A      | 13-JAN-2008 |
|      1 |     12 | A      | 20-JAN-2008 |
|      2 |     11 | T      | 01-FEB-2008 |
|      1 |     10 | T      | 02-FEB-2008 |
|      2 |     11 | A      | 20-FEB-2008 |

Запрос на то, чтобы выяснить, кто работает, когда в какой работе, является нетривиальным. Итак, моя функция денормализации заполняет временную таблицу только диапазонами дат для каждого задания, для любого EMP_ID s, переданного через курсор. Прохождение через EMP_ID с 1 и 2 приведет к следующим результатам:

| EMP_ID | JOB_ID | START_DATE  | END_DATE    |
|      1 |     10 | 10-JAN-2008 | 02-FEB-2008 |
|      2 |     11 | 13-JAN-2008 | 01-FEB-2008 |
|      1 |     12 | 20-JAN-2008 |             |
|      2 |     11 | 20-FEB-2008 |             |

( END_DATE позволяет NULL s для заданий,которые не имеют заранее определенной даты окончания.)

Как вы можете себе представить, эта денормализованная форма намного проще для запроса, но для ее создания-насколько я могу судить-требуется временная таблица для хранения промежуточных результатов (например, записей заданий, для которых была найдена строка активации, но не termination...yet). Использование конвейерной табличной функции для заполнения временной таблицы и последующего возврата ее строк-это единственный способ, который я понял, как это сделать.

sql   oracle   plsql    

578   6   17:33, 23rd August, 2020


Какие библиотеки PL/SQL для автоматической генерации JSON вы рекомендуете?

Есть ли какие-нибудь хорошие библиотеки PL/SQL для JSON, с которыми вы работали и нашли их полезными?

В PL/SQL мне приходится утомительно передавать код возврата значений JSON в функции JavaScript. Я нашел одну библиотеку PL / SQL для автоматической генерации JSON,но она не делает точно все, что мне нужно. Например, я не мог расширить базовые функции в библиотеке, чтобы вернуть сложную древовидную структуру данных JSON, требуемую используемым мной компонентом дерева JavaScript.

Примечание:
Система, которая находится в производстве уже более 8 лет, была спроектирована так, чтобы использовать PL/SQL для CRUDs и большей части бизнес-логики. PL/SQL также генерирует 90% слоя представления (HTML/JavaScript), с помощью mod PL/SQL. другой 10% является отчетными данными, выполненными через Oracle Reports Builder.

json   plsql    

411   5   16:31, 10th August, 2020