Oracle PLS-00323子程序或游标';CPQ(数据)(处理)';在包规范中声明,并且必须在包体中定义
添加新过程时,我似乎无法执行包体 有人能告诉我我遗漏了什么吗?例如,包裹的参考资料等 我努力想知道我错在哪里了 提前谢谢你的帮助 包装Oracle PLS-00323子程序或游标';CPQ(数据)(处理)';在包规范中声明,并且必须在包体中定义,oracle,plsql,Oracle,Plsql,添加新过程时,我似乎无法执行包体 有人能告诉我我遗漏了什么吗?例如,包裹的参考资料等 我努力想知道我错在哪里了 提前谢谢你的帮助 包装 CREATE OR REPLACE PACKAGE TEST.CPQ_QUOTE_DATA_API IS FUNCTION Check_Exist___ ( PROJECT_ID_ IN VARCHAR2, SUB_PROJECT_ IN VARCHAR2, ACTIVITY_ID_ IN VARCHAR2, ORDER_NO_ IN VARCH
CREATE OR REPLACE PACKAGE TEST.CPQ_QUOTE_DATA_API IS
FUNCTION Check_Exist___ (
PROJECT_ID_ IN VARCHAR2,
SUB_PROJECT_ IN VARCHAR2,
ACTIVITY_ID_ IN VARCHAR2,
ORDER_NO_ IN VARCHAR2,
PART_NO_ IN VARCHAR2) RETURN BOOLEAN;
PROCEDURE CPQ_DATA_HANDLE___ (
PROJECT_ID_ IN VARCHAR2,
SUB_PROJECT_ IN VARCHAR2,
ACTIVITY_ID_ IN VARCHAR2,
ORDER_NO_ IN VARCHAR2,
PART_NO_ IN VARCHAR2,
QTY_ IN NUMBER,
PRICE_COST_ IN NUMBER,
GPARTCOST_ IN NUMBER,
CPQ_DATE_ IN VARCHAR2,
DATECREATED_ IN VARCHAR2);
END CPQ_QUOTE_DATA_API;
包体
CREATE OR REPLACE PACKAGE BODY TEST.CPQ_QUOTE_DATA_API IS
FUNCTION Check_Exist___ (
PROJECT_ID_ IN VARCHAR2,
SUB_PROJECT_ IN VARCHAR2,
ACTIVITY_ID_ IN VARCHAR2,
ORDER_NO_ IN VARCHAR2,
PART_NO_ IN VARCHAR2) RETURN BOOLEAN
IS
dummy_ NUMBER;
CURSOR exist_control IS
SELECT 1
FROM CPQ_QUOTE_DATA_TAB
WHERE PROJECT_ID_ = PROJECT_ID
AND SUB_PROJECT_ = SUB_PROJECT
AND ACTIVITY_ID_ = ACTIVITY_ID
AND ORDER_NO_ = ORDER_NO
AND PART_NO_ = PART_NO;
BEGIN
OPEN exist_control;
FETCH exist_control INTO dummy_;
IF (exist_control%FOUND) THEN
CLOSE exist_control;
RETURN(TRUE);
END IF;
CLOSE exist_control;
RETURN(FALSE);
END Check_Exist___;
PROCEDURE CPQ_DATA_HANDLE___
as
PROJECT_ID_ VARCHAR2(10 CHAR);
SUB_PROJECT_ VARCHAR2(10 CHAR);
ACTIVITY_ID_ VARCHAR2(10 CHAR);
ORDER_NO_ VARCHAR2(12 CHAR);
PART_NO_ VARCHAR2(25 CHAR);
QTY_ NUMBER;
PRICE_COST_ NUMBER;
GPARTCOST_ NUMBER;
CPQ_DATE_ VARCHAR2(50 CHAR);
DATECREATED_ VARCHAR2(50 CHAR);
CURSOR get_record IS
SELECT *
FROM TEST.WTS_CPQ_DATA_TRANS_TAB;
GetRec get_record%ROWTYPE;
BEGIN
open get_record;
loop
fetch get_record into GetRec;
exit when get_record%NOTFOUND;
PROJECT_ID_ := GetRec.PROJECT_ID;
SUB_PROJECT_ := GetRec.SUB_PROJECT;
ACTIVITY_ID_ := GetRec.ACTIVITY_ID;
ORDER_NO_ := GetRec.ORDER_NO;
PART_NO_ := GetRec.PART_NO;
QTY_ := GetRec.QTY;
PRICE_COST_ := GetRec.PRICE_COST;
GPARTCOST_ := GetRec.GPARTCOST;
CPQ_DATE_ := GetRec.CPQ_DATE;
DATECREATED_ := GetRec.DATECREATED;
IF TEST.CPQ_QUOTE_DATA_API.CHECK_EXIST___(PROJECT_ID_, SUB_PROJECT_, ACTIVITY_ID_, ORDER_NO_, PART_NO_) = TRUE
THEN
insert into TEST.WTS_CPQ_ERROR_DATA
(PROJECT_ID,SUB_PROJECT,ACTIVITY_ID,ORDER_NO,PART_NO,QTY,PRICE_COST,GPARTCOST,CPQ_DATE,DATE_CREATED)
VALUES
(PROJECT_ID_,SUB_PROJECT_,ACTIVITY_ID_,ORDER_NO_,PART_NO_,QTY_,PRICE_COST_,GPARTCOST_,CPQ_DATE_,DATECREATED_)
;
COMMIT;
ELSE
insert into TEST.CPQ_QUOTE_DATA_TAB
(PROJECT_ID,SUB_PROJECT,ACTIVITY_ID,ORDER_NO,PART_NO,QTY,PRICE_COST,GPARTCOST,CPQ_DATE,DATE_CREATED)
VALUES
(PROJECT_ID_,SUB_PROJECT_,ACTIVITY_ID_,ORDER_NO_,PART_NO_,QTY_,PRICE_COST_,GPARTCOST_,CPQ_DATE_,DATECREATED_)
;
COMMIT;
END IF;
END LOOP;
close get_record;
END CPQ_DATA_HANDLE___;
END CPQ_QUOTE_DATA_API;
您的过程没有参数,但在主体中有局部变量。因此,实施与宣言不同,两者被视为两种不同的程序 你的 应该是
PROCEDURE CPQ_DATA_HANDLE___ (
PROJECT_ID_ VARCHAR2,
SUB_PROJECT_ VARCHAR2,
...
as
您好Thorsten谢谢您的建议,在我开始循环后,将变量转换为参数值会导致错误PLS-00363。它声明我以前使用的所有变量都不能用作赋值目标。e、 g PROJECT_ID:=GetRec.PROJECT_ID;这是因为所有的参数都是默认的变量。通过在spec和body中添加
IN-OUT
或OUT
像INPROJECT\u ID\u IN-OUT VARCHAR2
来更改它们。(好吧,在一个地方修改,然后复制粘贴到另一个地方。)谢谢你帮了我很多忙。
PROCEDURE CPQ_DATA_HANDLE___ (
PROJECT_ID_ VARCHAR2,
SUB_PROJECT_ VARCHAR2,
...
as