0

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

存储过程调用另一个包中的存储过程。但是,我需要将 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 吗?请帮忙 !!

4

1 回答 1

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;
于 2013-11-04T17:47:50.557 回答