我有一个包,其主体由一个存储过程组成。
存储过程调用另一个包中的存储过程。但是我需要将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?请帮忙!!
答案 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;