oracle 嵌套游标写法
一下是我写的oracle 过程,其中有嵌套游标。编译有错误,请各位指点
CREATE OR REPLACE PROCEDURE daily_stat
(
is_Projectid IN DAILY_INFO.PROJECTID%TYPE,
on_Code OUT NUMBER,
os_Msg OUT VARCHAR2
)
AS
vs_Projectid PROJECT_BASE.PROJECTID%TYPE;
vs_Projectname SPPROJECTINFOTABLE.PROJECTNAME%TYPE;
vs_Projectstage PROJECT_STAGE.STAGE_NAME%TYPE;
vn_PM SPEMPLOYEEINFOTABLE.EMPLOYEENAME%TYPE;
vn_Plantime PROJECT_STAGE.PLANTIME%TYPE;
vn_Facttime PROJECT_STAGE.FACTTIME%TYPE;
vs_Coderows PROJECT_STAGE.CODENUM%TYPE;
all_Facttime PROJECT_STAGE.FACTTIME%TYPE;
all_Coderows PROJECT_STAGE.CODENUM%TYPE;
vs_Content DAILY_INFO.CONTENT%TYPE;
COURSOR cur_Stage IS
SELECT PROJECTID,PROJECT_STAGE
FROM DAILY_INFO
WHERE(PROJECTID = is_Projectid OR '0'= is_Projectid)
AND flag=0;
CURSOR cur_GetPoInfo IS
SELECT TIME_TAKE,CODENUM
FROM DAILY_INFO
WHERE PROJECTID = is_Projectid
AND project_stage = vs_Projectstage
AND flag = 0;
begin
open cur_Stage ;
fetch cur_Stage into vs_Projectid,vs_Projectstage;
while cur_Stage%found loop
on_Code := 0;
os_Msg := '';
OPEN cur_GetPoInfo;
FETCH cur_GetPoInfo INTO vn_Facttime,vs_Coderows;
WHILE cur_GetPoInfo%FOUND LOOP
all_Facttime:=0+vn_Facttime;
all_Coderows:=0+vs_Coderows;
update project_stage set facttime=all_Facttime,codenum=all_Coderows where projectid=is_Projectid and stage_name=vs_Projectstage;
UPDATE DAILY_INFO SET FLAG=1 WHERE PROJECTID = IS_PROJECTID;
FETCH cur_GetPoInfo INTO vn_Facttime,vs_Coderows;
END LOOP;
CLOSE cur_GetPoInfo;
FETCH cur_Stage INTO vs_Projectid,vs_Projectstage;
END LOOP;
CLOSE cur_Stage;
EXCEPTION
WHEN NO_DATA_FOUND THEN
on_Code := -SQLCODE;
ROLLBACK;
RETURN;
WHEN OTHERS THEN
on_Code := SQLCODE;
ROLLBACK;
RETURN;
END;
/