Платформа: Oracle
Язык: PL / SQL
Проблема: хотите вывести курсор OUT процедуры в SQLDeveloper SQLWosksheet.
Кто-нибудь знает, как использовать Oracle «Выбрать * из таблицы (PipelinedFunction (Param))» для проверки курсоров вывода кода процедуры?
Я использую Crsytal Reports для хранимой процедуры Oracle. Crystal требует, чтобы процедура возвращала курсор, который он выбирает и читает.
Код процедуры, который у меня есть, в настоящее время работает, но я хочу найти самый простой способ просмотреть последствия изменений в коде процедуры. У меня есть SQLDeveloper, и я занимаюсь созданием и тестированием SQL в этом. Я хотел бы получить быстрый результат, видимый в окне Результат запроса разработчика SQL («Рабочая таблица SQL»).
Есть ли (простой) способ использовать функцию для чтения курсора из процедуры? (и передать это в функцию Table?)
Свернутый, я знаю, но я лучше справляюсь, когда вижу результаты изменений кода. Если я смогу просмотреть результаты записи напрямую, это ускорит разработку отчета.
Я знаю о функции Table и немного о конвейерной обработке в Oracle. Я немного знаю о курсорах в целом и sys_refcursor. Я знаю о типах и почему они мне нужны. (Разве sys_regCursor не поможет нам избежать этого?)
Текущая процедура выполняет адекватную, но неблагодарную серию запросов, вставки в глобальные временные таблицы (GTT), объединения из GTT и исходных таблиц, дополнительные вставки и другие самостоятельные объединения, а затем ВЫБИРАЕТ результаты в курсор OUT. Я мог бы сделать лучше, полагаясь только на курсоры и тому подобное, но текущий метод достаточно хорош для получения результатов в отчете.
Я думаю, что могу неплохо справляться с SQL (для наших целей), но я не являюсь разработчиком для Oracle ... но мне нужна помощь.
Кто-нибудь сталкивался с этим? Идея заключалась в том, чтобы ускорить мою разработку кода процедуры, но я потратил пару дней в поисках способа просто получить результат ... не то, что я имел в виду.
Обновление:
Я попробовал несколько заяц-схем на основе щепок, которые я видел в Интернете ... таких как
Create or replace FUNCTION GET_BACKPLANE (
Node VARCHAR2 ) RETURN SYS_REFCURSOR
AS
RESULTS SYS_REFCURSOR;
BEGIN
Open Results for
Select Backplane(Results, Node) from Dual ;
... etc.
и
Create or replace Function GET_BACKPLANE (
NODE VARCHAR2 ) RETURN My_Table_Stru%ROWTYPE PIPELINED
AS
BEGIN ...
Я не думаю, что Oracle даже рассматривает возможность повторного обращения к выходному курсору из процедуры («Results» - это sys_refcursor, который содержит результаты последнего SELECT в процедуре). Я не знаю, как определить это, открыть его и ссылаться на него из процедуры.
Я никогда не добирался до места, где я мог попробовать
SELECT * FROM TABLE(GET_BACKPLANE( ... etc )
Извините за любые опечатки и плохую грамматику Oracle ... это было долгими днями.