planetz Ответов: 2

возврат нескольких строк из хранимой процедуры oracle


Всем Привет,

Я создал процедуру для отображения строк из таблицы следующим образом:
CREATE PROCEDURE SPGETDEPT
(P_CUR OUT SYS_REFCURSOR)
AS
BEGIN
OPEN P_CUR FOR
SELECT * FROM DEPT;
END;
/


и запустить его:
var cur REFCURSOR
exec spgetdept(:cur);
print cur;


Мой вопрос заключается в том, как объединить вышеперечисленные две части так, чтобы выходные данные можно было получить, выполнив только одну процедуру:
execute newStoredProcedure;


Любая помощь или идея высоко ценится....
Спасибо...!!

2 Ответов

Рейтинг:
2

Wendelius

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

Взгляните на темы:
- Функция, возвращающая результирующий набор
- Создание конвейерной функции
в Примеры создания функций Oracle[^]


planetz

Привет Мика,

Что я хотел сделать, так это подключить эту процедуру к dropdownlist во время разработки через sqlDataSource, чтобы показать имя отдела в раскрывающемся списке. Просто для практики. Но нет никакой возможности включить функцию. Есть ли какой-нибудь способ создать процедуру для того же самого?

Wendelius

Ладно, понятно. Взгляните на Использование хранимых процедур Oracle в команде Sqldatasource Select[^Это было бы то, что вы ищете?

Wendelius

Просто для пояснения вы можете попробовать использовать синтаксис

ВЫБИРАТЬ... Из таблицы (FunctionName...)

Таким образом, с точки зрения SqlDataSource это будет простой выбор, а не функция или хранимая процедура.

Рейтинг:
1

planetz

Эй ... я пробовал что-то вроде этого:

CREATE OR REPLACE PROCEDURE sp AS
DEPT_REC     tbldept%TABLETYPE;
CURSOR p_cur IS SELECT * FROM tbldept;
BEGIN
OPEN p_cur;
DBMS_OUTPUT.PUT_LINE('HI');
LOOP
    FETCH p_cur INTO DEPT_REC;
    EXIT WHEN p_cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(DEPT_REC);            
  END LOOP;
CLOSE p_cur; 
END;


вывод идет, как и ожидалось, но заголовки столбцов не поступают в Вывод..Я думаю, что это не будет служить моей цели...