IBOCONSOL에서 실행을 했는데
프로시저 내부 UPDATE는 잘 된듯 한데..
'Problem in BindingCursor'라고 메시지가 뜨네요...
왜 저런 메시지가 뜨는것인지 모르겠습니다..
그럼 아시는분 리플 부탁 드립니다..(__)
프로시저 실행
execute procedure "PadBadDataUpdate"('new,'yrty45745','00000193','0','C1608', 'P1608')
이하는 Create Procedure 구문 입니다..
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
/* Stored procedures */
CREATE PROCEDURE "PadBadDataUpdate"
(
"ARGEQID" VARCHAR(30),
"ARGMODELID" VARCHAR(50),
"ARGBOARDID" VARCHAR(50),
"ARGMODULEID" INTEGER,
"ARGPARTID" VARCHAR(30),
"ARGPADID" VARCHAR(50)
)
AS
BEGIN EXIT; END ^
ALTER PROCEDURE "PadBadDataUpdate"
(
"ARGEQID" VARCHAR(30),
"ARGMODELID" VARCHAR(50),
"ARGBOARDID" VARCHAR(50),
"ARGMODULEID" INTEGER,
"ARGPARTID" VARCHAR(30),
"ARGPADID" VARCHAR(50)
)
AS
begin
Begin
-- Pad_Raw_Data 'P' 로 Update
Update Pad_Raw_Data Set JudgeMent = 'P' Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_ID = :argModuleID and Part_ID = :argPartID and Pad_ID = :argPadID;
-- Pad_Bad_Data Delete
Delete From Pad_Bad_Data Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_ID = :argModuleID and Part_ID = :argPartID and Pad_ID = :argPadID;
-- Pad_Error_Data 의 Error_Count 에서 1을 뺀다..
Update Pad_Error_Data Set Error_Count = Error_Count - 1 Where EQ_ID = :argEQID and Model_ID = :argModelID and Module_ID = :argModuleID and Part_ID = :argPartID and Pad_ID = :argPadID;
-- Part_Result의 Good_Pad_Number 에서 1을 더하고, Error_Pad_Number 에서 1을 뺀다.
Update Part_Result Set Good_Pad_Number = Good_Pad_Number + 1, Error_Pad_Number = Error_Pad_Number - 1
Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_ID = :argModuleID and Part_ID = :argPartID;
-- 이후에 해당 Part의 Pad에 Error난 Pad가 없으면 Part_Result를 'P'로 변경한다.
Update Part_Result Set Part_Result = (Select Case When Count(*) > 0 Then 'X' Else 'P' End From Pad_Bad_data Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_ID = :argModuleID and Part_ID = :argPartID )
Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_ID = :argModuleID and Part_ID = :argPartID;
-- Module_Result의 Good_Pad_Number 에서 1을 더하고, Error_Pad_Number 에서 1을 뺀다.
Update Module_Result Set Good_Pad_Number = Good_Pad_Number + 1, Error_Pad_Number = Error_Pad_Number - 1
Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_ID = :argModuleID;
-- 이후에 해당 Part의 Pad에 Error난 Pad가 없으면 Part_Result를 'P'로 변경한다.
Update Module_Result Set Module_Result = (Select Case When Count(*) > 0 Then 'X' Else 'P' End From Part_Result Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_ID = :argModuleID and Part_Result = 'X' )
Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_ID = :argModuleID;
-- Board_Result의 Pad_Good 에서 1을 더하고, Pad_Error 에서 1을 뺀다.
Update Board_Result Set Pad_Good = Pad_Good + 1, Pad_Error = Pad_Error - 1
Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID;
-- 이후에 해당 Part의 Pad에 Error난 Pad가 없으면 Part_Result를 'P'로 변경한다.
Update Board_Result Set Board_Result = (Select Case When Count(*) > 0 Then 'X' Else 'P' End From Module_Result Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID and Module_Result = 'X' )
Where EQ_ID = :argEQID and Model_ID = :argModelID and Board_ID = :argBoardID;
-- Model_Result의 board_inspected가 제일 큰 값에서
-- Good_Pad_Number 에서 1을 더하고, Error_Pad_Number 에서 1을 뺀다.
-- Module의 결과에 따라서 Module_Pass,Module_NG에도 Update한다.
Update Model_Result
Set Pad_Total_Good = Pad_Total_Good + 1,
Pad_Total_Error = Pad_Total_Error - 1,
Module_Pass = Module_Pass + (select case when Module_Result = 'P' then 1 else 0 end from Module_result Where EQ_ID = :argEQID and model_Id = :argModelID and board_id = :argBoardID and Module_Id = :argModuleID ),
Module_NG = Module_NG + (select case when Module_Result = 'P' then -1 else 0 end from Module_result Where EQ_ID = :argEQID and model_Id = :argModelID and board_id = :argBoardID and Module_Id = :argModuleID),
Board_Pass = Module_Pass + (select case when Board_Result = 'P' then 1 else 0 end from Board_result Where EQ_ID = :argEQID and model_Id = :argModelID and board_id = :argBoardID ),
Board_NG = Board_NG + (select case when Board_Result = 'P' then -1 else 0 end from Board_result Where EQ_ID = :argEQID and model_Id = :argModelID and board_id = :argBoardID )
Where EQ_ID = :argEQID and Model_ID = :argModelID and board_inspected = ( select max(board_inspected) from model_result Where model_Id = :argModelID );
End
end
^
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
|