必须在存储过程中声明变量错误

时间:2013-11-04 17:36:52

标签: sql database oracle plsql oracle-sqldeveloper

我有一个包,其主体由一个存储过程组成。

存储过程调用另一个包中的存储过程。但是我需要将select语句的结果作为参数传递。所以我将结果存储在变量中并将其作为参数传递。但是,当执行过程调用时,它没有声明变量。

这是示例代码。

create or replace 
PACKAGE BODY PKG_BODY

PROCEDURE PROC (error OUT VARCHAR2,
                  RESULT OUT BOOLEAN ) AS

-----------------------------
-----------------------------

 DECLARE
    PARAM TABLE1.COLUMN1%TYPE;
    BEGIN
    SELECT COLUMN1
    INTO PARAM
    FROM TABLE1
    WHERE COLUMN2=ID AND COLUMN3='NAME';
    END;

PUBLISH_MSG.PUBLISH_PMM_MSG('ID',PARAM,PO_ERR_MSG); --another procedure call
END PROC;

我收到以下错误:

PLS:00201 'Identifier PARAM must be declaed'

我是否必须在其他地方宣布PARAM?请帮忙!!

1 个答案:

答案 0 :(得分:3)

您已在嵌套的PL / SQL块中定义了该变量 - 无法从外部块访问它(在块完成后它甚至不存在)。您应该将param变量的定义移动到外部块,例如:

PROCEDURE PROC (error OUT VARCHAR2,
                  RESULT OUT BOOLEAN )
AS
  PARAM TABLE1.COLUMN1%TYPE;
BEGIN
-----------------------------
-----------------------------


    SELECT COLUMN1
    INTO PARAM
    FROM TABLE1
    WHERE COLUMN2=ID AND COLUMN3='NAME';

PUBLISH_MSG.PUBLISH_PMM_MSG('ID',PARAM,PO_ERR_MSG); --another procedure call
END PROC;