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;
4

2 回答 2

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变量:

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; 
于 2013-10-10T23:27:36.187 回答
0

您的过程只是将结果集提取到过程中的局部变量中。当过程退出时,变量不再在范围内。如果要从选择中返回数据,则需要使用引用光标。这是一些很好的例子的链接

于 2013-10-10T23:28:43.890 回答