使用select调用存储过程

时间:2013-10-10 23:20:45

标签: sql oracle stored-procedures plsql

我有一个查询,我必须把它放在一个存储过程中但是当我调用存储过程时它不会返回任何内容;

这是我的疑问:

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 个答案:

答案 0 :(得分: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; 

答案 1 :(得分:0)

您的过程只是将结果集提取到过程中的局部变量中。过程退出时,变量不再在范围内。如果要从select中返回数据,则需要使用ref游标。这是指向某些good examples

的链接