Script freezes before first line
From: Joe Mellors <joemellors_at_aol.com>
Date: 19 Mar 2002 15:26:57 -0800
Message-ID: <53566469.0203191526.26dfb648_at_posting.google.com>
PROJ_DATA GET_PROJECTS%ROWTYPE; CURSOR GET_IPPS (PPROJID APACR.TBLPROJECTIPPN.PROJID%TYPE) IS
IPP_DATA GET_IPPS%ROWTYPE; CURSOR PART_CHANGES (PPROJID APACR.TBLLOCATIONS.PROJID%TYPE, PIPP APACR.TBLLOCATIONS.IPP%TYPE) IS
PART_DATA PART_CHANGES%ROWTYPE; MINDATE DATE; CURSOR LATER_THAN_CHANGE (PPROJID APACR.STBLOUTMSGHEADER.PROJID%TYPE, PIPP APACR.STBLOUTMSGHEADER.IPP%TYPE) IS SELECT A.MKEY, A.NEW_ISS FROM APACR.STBLOUTMSGHEADER A, APACR.TBLOUTMSGHEADER B
LATER_DATA LATER_THAN_CHANGE%ROWTYPE; VPDC CHAR(1);
ICOUNT NUMBER(6);
HAPPY BOOLEAN;
MINMKEY NUMBER(7);
ROW_INSERTED BOOLEAN; BEGIN
INSERT INTO APACR.TBLDEBUG VALUES ('STARTING FILLTABLE SCRIPT', TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
END; /
INSERT INTO APACR.TBLDEBUG VALUES ('FINISHED FILLTABLE', TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); SET AUTOCOMMIT OFF Received on Wed Mar 20 2002 - 00:26:57 CET
Date: 19 Mar 2002 15:26:57 -0800
Message-ID: <53566469.0203191526.26dfb648_at_posting.google.com>
Hiya,
If anyone can help it would be greatly appreciated. I have created a script shown below to populate a table (tblprojipptable) according to some rules. It has autocommit on and inserts into a table (tbldebug) intending to inform me of the scripts progress as I predicted it would take quite some time as the datasets involved are very large. I started the script running in sqlplus on a floppy on the server but it seems to have frozen without even getting to line 1 because the insert statement immediately after begin is not in the table. Here is the script. Thanks in advance, Joe
SET AUTOCOMMIT ON DECLARE CURSOR GET_PROJECTS IS
SELECT PROJID FROM APACR.TBLINTPROJECT WHERE PDC = 'I';
PROJ_DATA GET_PROJECTS%ROWTYPE; CURSOR GET_IPPS (PPROJID APACR.TBLPROJECTIPPN.PROJID%TYPE) IS
SELECT IPP, IS_MASTER FROM APACR.TBLPROJECTIPPN WHERE PROJID = PPROJID;
IPP_DATA GET_IPPS%ROWTYPE; CURSOR PART_CHANGES (PPROJID APACR.TBLLOCATIONS.PROJID%TYPE, PIPP APACR.TBLLOCATIONS.IPP%TYPE) IS
SELECT DISTINCT A.PNR, A.MFC, B.PICKUPMKEY, B.SEQNO, B.DATESTAMP FROM APACR.STBLPROJECTPARTS B, APACR.TBLLOCATIONS A WHERE B.MFC = A.MFC AND B.PNR = A.PNR AND B.PROJID = A.PROJID AND B.CHG = 'R' AND A.IPP = PIPP AND A.PROJID = PPROJID;
PART_DATA PART_CHANGES%ROWTYPE; MINDATE DATE; CURSOR LATER_THAN_CHANGE (PPROJID APACR.STBLOUTMSGHEADER.PROJID%TYPE, PIPP APACR.STBLOUTMSGHEADER.IPP%TYPE) IS SELECT A.MKEY, A.NEW_ISS FROM APACR.STBLOUTMSGHEADER A, APACR.TBLOUTMSGHEADER B
WHERE B.MKEY = A.MKEY AND B.PROJID = A.PROJID AND B.IPP = A.IPP AND B.STATUS <> 'REJECTED' AND A.DATESTAMP >= MINDATE AND A.OLD_STATUS IS NULL AND A.NEW_STATUS = 'EXTRACTED' AND A.IPP = PIPP AND A.PROJID = PPROJID ORDER BY A.DATESTAMP;
LATER_DATA LATER_THAN_CHANGE%ROWTYPE; VPDC CHAR(1);
ICOUNT NUMBER(6);
HAPPY BOOLEAN;
MINMKEY NUMBER(7);
ROW_INSERTED BOOLEAN; BEGIN
INSERT INTO APACR.TBLDEBUG VALUES ('STARTING FILLTABLE SCRIPT', TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
FOR PROJ_DATA IN GET_PROJECTS LOOP FOR IPP_DATA IN GET_IPPS(PROJ_DATA.PROJID) LOOP -- MINMKEY IS THE EARLIEST MESSAGE WE ARE INTERESTED IN SHOWING PART CHANGES FOR IN TBLPROJIPPNTABLE -- THIS IS BECAUSE ENTRIES FOR AFTER ANY MESSAGE THAT CAN STILL BEREJECTED ARE NEEDED
SELECT MIN(MKEY) INTO MINMKEY FROM APACR.TBLOUTMSGHEADER WHERE ((STATUS = 'EXTRACTED') OR (STATUS = 'SENT')) AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID; INSERT INTO APACR.TBLDEBUG VALUES ('SELECTED MINMKEY',TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
IF IPP_DATA.IS_MASTER = 'Y' THEN FOR PART_DATA IN PART_CHANGES(PROJ_DATA.PROJID, IPP_DATA.IPP) LOOPIN OTHER IPPS WE CAN ENTER A NULL RECORD
-- IF MKEY FROM STBLPROJECTPARTS APPLIES TO THIS IPP WE CAN USE
IT
-- OTHERWISE WE HAVE TO COMPARE STBLPROJECTPARTS AND
STBLOUTMSGHEADER DATESTAMPS
-- IF MKEY IN STBLPROJECTPARTS IS NULL AND THE PART DOESN'T EXIST
HAPPY := TRUE; IF PART_DATA.PICKUPMKEY IS NOT NULL THEN SELECT COUNT(*) INTO ICOUNT FROM APACR.TBLOUTMSGHEADER WHERE MKEY = PART_DATA.PICKUPMKEY AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID; INSERT INTO APACR.TBLDEBUG VALUES ('CHECKED TO SEE IF MKEYBELONGS TO IPP', TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
IF ICOUNT > 0 THEN IF PART_DATA.PICKUPMKEY >= MINMKEY THEN BEGIN SELECT 1 INTO ICOUNT FROM DUAL WHERE EXISTS (SELECT * FROM APACR.TBLPROJIPPTABLE WHERE PICKUPMKEY = PART_DATA.PICKUPMKEY AND MFC = PART_DATA.MFC AND PNR = PART_DATA.PNR AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID); EXCEPTION WHEN NO_DATA_FOUND THEN ICOUNT := 0; END; IF ICOUNT = 0 THEN INSERT INTO APACR.TBLPROJIPPTABLE VALUES (PROJ_DATA.PROJID, IPP_DATA.IPP, PART_DATA.PNR, PART_DATA.MFC, PART_DATA.SEQNO, PART_DATA.PICKUPMKEY); END IF; END IF; ELSE HAPPY := FALSE; END IF; ELSE SELECT COUNT(*) INTO ICOUNT FROM APACR.TBLLOCATIONS A, APACR.TBLPROJECTIPPN B WHERE B.IS_MASTER <> 'Y' AND A.PROJID = B.PROJID AND A.IPP = B.IPP AND A.MFC = PART_DATA.MFC AND A.PNR = PART_DATA.PNR AND A.IPP <> IPP_DATA.IPP AND A.PROJID = PROJ_DATA.PROJID; INSERT INTO APACR.TBLDEBUG VALUES ('COUNTED JOIN LOCATIONSPROJECTIPPN', TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
IF ICOUNT = 0 THEN BEGIN SELECT 1 INTO ICOUNT FROM DUAL WHERE EXISTS (SELECT * FROM APACR.TBLPROJIPPTABLE WHERE PICKUPMKEY IS NULL AND MFC = PART_DATA.MFC AND PNR = PART_DATA.PNR AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID); EXCEPTION WHEN NO_DATA_FOUND THEN ICOUNT := 0; END; IF ICOUNT = 0 THEN INSERT INTO APACR.TBLPROJIPPTABLE VALUES (PROJ_DATA.PROJID, IPP_DATA.IPP, PART_DATA.PNR, PART_DATA.MFC, PART_DATA.SEQNO, PART_DATA.PICKUPMKEY); END IF; ELSE HAPPY := FALSE; END IF; END IF; IF NOT(HAPPY) THEN SELECT MIN(DATESTAMP) INTO MINDATE FROM APACR.STBLOUTMSGHEADER WHERE DATESTAMP > PART_DATA.DATESTAMP AND OLD_STATUS IS NULL AND NEW_STATUS = 'EXTRACTED' AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID; INSERT INTO APACR.TBLDEBUG VALUES ('FOUND DATE OF EXTRACTION',TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
IF MINDATE IS NULL THEN BEGIN SELECT 1 INTO ICOUNT FROM DUAL WHERE EXISTS (SELECT * FROM APACR.TBLPROJIPPTABLE WHERE PICKUPMKEY IS NULL AND MFC = PART_DATA.MFC AND PNR = PART_DATA.PNR AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID); EXCEPTION WHEN NO_DATA_FOUND THEN ICOUNT := 0; END; IF ICOUNT = 0 THEN INSERT INTO APACR.TBLPROJIPPTABLE VALUES (PROJ_DATA.PROJID, IPP_DATA.IPP, PART_DATA.PNR, PART_DATA.MFC, PART_DATA.SEQNO, NULL); END IF; ELSE ROW_INSERTED := FALSE; FOR LATER_DATA IN LATER_THAN_CHANGE(PROJ_DATA.PROJID, IPP_DATA.IPP) LOOP IF SUBSTR(LATER_DATA.NEW_ISS, 1, 1) = 'M' THEN IF LATER_DATA.MKEY >= MINMKEY THEN BEGIN SELECT 1 INTO ICOUNT FROM DUAL WHERE EXISTS (SELECT * FROM APACR.TBLPROJIPPTABLE WHERE PICKUPMKEY = LATER_DATA.MKEY AND MFC = PART_DATA.MFC AND PNR = PART_DATA.PNR AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID); EXCEPTION WHEN NO_DATA_FOUND THEN ICOUNT := 0; END; IF ICOUNT = 0 THEN INSERT INTO APACR.TBLPROJIPPTABLE VALUES (PROJ_DATA.PROJID, IPP_DATA.IPP, PART_DATA.PNR, PART_DATA.MFC, PART_DATA.SEQNO, LATER_DATA.MKEY); END IF; ROW_INSERTED := TRUE; EXIT; END IF; END IF; END LOOP; IF NOT(ROW_INSERTED) THEN BEGIN SELECT 1 INTO ICOUNT FROM DUAL WHERE EXISTS (SELECT * FROM APACR.TBLPROJIPPTABLE WHERE PICKUPMKEY IS NULL AND MFC = PART_DATA.MFC AND PNR = PART_DATA.PNR AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID); EXCEPTION WHEN NO_DATA_FOUND THEN ICOUNT := 0; END; IF ICOUNT = 0 THEN INSERT INTO APACR.TBLPROJIPPTABLE VALUES (PROJ_DATA.PROJID, IPP_DATA.IPP, PART_DATA.PNR, PART_DATA.MFC, PART_DATA.SEQNO, NULL); END IF; END IF; END IF; END IF; END LOOP; ELSE -- IF THE IPP IS STILL AT DRAFT THEN ALL PART CHANGES CAN BEENTERED WITH MKEY OF NULL
FOR PART_DATA IN PART_CHANGES(PROJ_DATA.PROJID, IPP_DATA.IPP) LOOP BEGIN SELECT 1 INTO ICOUNT FROM DUAL WHERE EXISTS (SELECT * FROM APACR.TBLPROJIPPTABLE WHERE PICKUPMKEY IS NULL AND MFC = PART_DATA.MFC AND PNR = PART_DATA.PNR AND IPP = IPP_DATA.IPP AND PROJID = PROJ_DATA.PROJID); EXCEPTION WHEN NO_DATA_FOUND THEN ICOUNT := 0; END; IF ICOUNT = 0 THEN INSERT INTO APACR.TBLPROJIPPTABLE VALUES (PROJ_DATA.PROJID, IPP_DATA.IPP, PART_DATA.PNR, PART_DATA.MFC, PART_DATA.SEQNO, NULL); END IF; END LOOP; END IF; INSERT INTO APACR.TBLDEBUG VALUES ('FINISHED IPP ' || IPP_DATA.IPP || PROJ_DATA.PROJID, TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); END LOOP; END LOOP;
END; /
INSERT INTO APACR.TBLDEBUG VALUES ('FINISHED FILLTABLE', TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); SET AUTOCOMMIT OFF Received on Wed Mar 20 2002 - 00:26:57 CET