Прочитав статью и восприняв понимание продукта Oracle BI Publisher критически, а именно, на момент существовавшей тогда версии 11.1.1.7.150120, хочется заметить, что все, указанное в цитируемой статье можно было сделать на BI Publisher и доверить любому непрограммирующему пользователю. Плюс к этому, продукт имел trial и stand-alone версию. Поддерживался API на Java, уже был доделан вызов продукта как web-сервиса.
Чуть более интересный вопрос, который был получен от читателей моего блога: как в 12-й версии работать с переменными типа REF CURSOR для массовой миграции с самодельной отчетной системы на продукт Oracle BI EE 12с.
Рассмотрим код, который вернет REF CURSOR в зависимости от параметра.
create or replace PACKAGE REF_CURSOR_TEST AS
TYPE refcursor IS REF CURSOR;
pCountry VARCHAR2(10);
pState VARCHAR2(20);
FUNCTION GET( pCountry IN VARCHAR2
) RETURN
REF_CURSOR_TEST.refcursor;
END;
create or replace PACKAGE BODY REF_CURSOR_TEST AS
FUNCTION GET(
pCountry IN VARCHAR2
)
RETURN REF_CURSOR_TEST.refcursor
IS
l_cursor REF_CURSOR_TEST.refcursor;
BEGIN
IF ( pCountry = 'USA' ) THEN
OPEN l_cursor FOR
SELECT *
FROM orders d
WHERE d.customer_id IN (101,102);
ELSE
OPEN l_cursor FOR
SELECT * FROM EMPLOYEES;
END IF;
RETURN l_cursor;
END GET;
END REF_CURSOR_TEST;
Данный код приводится в стандартной документации, но вызывает сложность в использовании, особенно в ограниченном количестве ресурса времени и наличии разработчиков мигрируемой системы.
Далее по шагам расписано, как его проще имплементировать.
Делаем модель данных с параметром.
![Параметр для процедуры вызова. Параметр для процедуры вызова.](https://habrastorage.org/getpro/habr/upload_files/e67/7db/c84/e677dbc840f58cbbde1fe1a138dc07d4.png)
Образец вызова NON-standard SQL, который вернет REF CURSOR. Само название уже вызывает непонимание при имплементации.
![Вызов процедуры с REF CURSOR. Вызов процедуры с REF CURSOR.](https://habrastorage.org/getpro/habr/upload_files/99d/07e/d6e/99d07ed6e0e73849268f0a09400717e5.png)
Проверка типов, обязательное задание sample.xml. Вернулось 7 строк из одной таблицы.
![7 строк возврата из процедуры
7 строк возврата из процедуры](https://habrastorage.org/getpro/habr/upload_files/623/35b/c98/62335bc98cca5fdc7074b8cf53151bc7.png)
Проверка типов, обязательное задание sample.xml. Вернулось 108 строк из другой таблицы.
![108 строк возврата из процедуры 108 строк возврата из процедуры](https://habrastorage.org/getpro/habr/upload_files/b79/586/ae8/b79586ae80c44f7668d5adef2c0043d3.png)
Пример автосгенерированной разметки на первом sample.xml.
![Первый тип таблицы вернул сервер Первый тип таблицы вернул сервер](https://habrastorage.org/getpro/habr/upload_files/04e/03a/356/04e03a3562831a49470aac79e39b6e85.png)
Пример автосгенерированной разметки на втором sample.xml.
![Второй тип таблицы вернулся в сервере Второй тип таблицы вернулся в сервере](https://habrastorage.org/getpro/habr/upload_files/755/2ac/e54/7552ace544ae58cbaa4c1a09426073a3.png)
Структура XSL-FO тегов у первого типа REF CURSOR.
![Первая часть разметки на первом выгруженном образце XML Первая часть разметки на первом выгруженном образце XML](https://habrastorage.org/getpro/habr/upload_files/94e/c5d/aca/94ec5daca0669429148bc94bd262c4cd.png)
9.Структура XSL-FO тегов у второго типа REF CURSOR.
![Вторая часть разметки на втором выгруженном образце XML Вторая часть разметки на втором выгруженном образце XML](https://habrastorage.org/getpro/habr/upload_files/f2b/4d1/9ed/f2b4d19edd8a94e9eac2dadc567570bc.png)
Задание условия на первом условном регионе.
![Ставим условие на первый условный регион по значению параметра Ставим условие на первый условный регион по значению параметра](https://habrastorage.org/getpro/habr/upload_files/054/c21/4e3/054c214e388d46adb7e22603d14831b6.png)
Задание условия на втором условном регионе.
![Ставим значение на второй условный регион по значению параметра Ставим значение на второй условный регион по значению параметра](https://habrastorage.org/getpro/habr/upload_files/f3f/2e3/8e8/f3f2e38e8fd8fb7120a7087e789f8eee.png)
Подрузка готовой разметки в отчет.
![Не забываем загрузить разметку в отчет Не забываем загрузить разметку в отчет](https://habrastorage.org/getpro/habr/upload_files/2a9/194/d64/2a9194d6455617dbebcda6d32317a68e.png)
На основании описанной в статье технологии, было мигрировано несколько сотен различных отчетов без радикальной переделки кода, с возможностью быстрой визуальной отладки и внесением измений в формирование отчетов.
Ее рекомендуется использовать при массовых миграциях "самописных" отчетных систем, базирующихся на Oracle, либо процедурах извлечения XML, совместимыми с описанным технологическим приемом.