2013-10-10 4 views
1

У меня есть запрос, и я должен поместить его в хранимую процедуру, но когда я вызываю хранимую процедуру, он ничего не возвращает;Вызов хранимой процедуры с помощью выбора

Это мой запрос:

select * from mdc_cat_parametros where param_llave='SMTP_SERVER'; 

Когда я выполнить запрос он возвращает одну строку, но хранимой процедуры это не распространяется.

Это моя хранимая процедура:

CREATE OR REPLACE PROCEDURE MDC_UTIL_PROCEDURE 
AS 
    RT MDC_CAT_PARAMETROS%ROWTYPE; 
BEGIN 
    SELECT * INTO RT FROM MDC_CAT_PARAMETROS WHERE PARAM_LLAVE='SMTP_SERVER'; 
END MDC_UTIL_PROCEDURE; 

я вызвать хранимую процедуру:

EXECUTE MDC_UTIL_PROCEDURE; 

ответ

2

Хранимая процедура заполняемых RT но тогда нужно выбрать из него:

CREATE OR REPLACE PROCEDURE MDC_UTIL_PROCEDURE (results OUT SYS_REFCURSOR) 
AS 
    RT MDC_CAT_PARAMETROS%ROWTYPE; 
BEGIN 
    SELECT * INTO RT FROM MDC_CAT_PARAMETROS WHERE PARAM_LLAVE='SMTP_SERVER'; 
    OPEN results FOR SELECT * FROM RT; 
END MDC_UTIL_PROCEDURE; 

или вы можете упростить его, чтобы избавиться от RT va

CREATE OR REPLACE PROCEDURE MDC_UTIL_PROCEDURE (results OUT SYS_REFCURSOR) 
AS 
BEGIN 
    OPEN results FOR 
    SELECT * FROM MDC_CAT_PARAMETROS WHERE PARAM_LLAVE='SMTP_SERVER'; 
END MDC_UTIL_PROCEDURE; 
+0

Первое предложение показывает, что «табло или вид не существует», второй компилируется правильно, но как я вызываю процедуру, я пытаюсь использовать EXECUTE MDC_UTIL_PROCEDURE; но показывает что-то о параметрах PLS-00306: неправильное число или типы аргументов при вызове 'MDC_UTIL_PROCEDURE' – user2084446

+1

переменная rc refcursor; exec MDC_UTIL_PROCEDURE (: rc); print rc; Я РЕШАЛ СПАСИБО – user2084446

0

Ваша процедура просто извлекает результирующий набор в локальную переменную в процедуре. Когда процедура завершается, переменная больше не находится в области видимости. Если вы хотите вернуть данные из выбора, вам нужно использовать курсор ref. Вот ссылка на некоторые good examples

Смежные вопросы