| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> job is done, but data does not show up in table for 1 hour
I am trying to figure out why all indications show the job is done, but
the blasted data does not show in its_jobcost for 1 to 3 hours! I
don't see any locks on the table or suspect sessions. Server load is
very light. I have a job that uses 10 cursors to do one insert and 9
updates to a table. Not my code, but I am now resposible for it.
I select * from dba_jobs and get the following results (summary) job =366
last_date =7/13/2005 8:00:02 AM last_sec =08:00:02 next_date =7/14/2005 8:00:00 AM next_sec =08:00:02 total_time =523 broken =N
A subset of the code is below
CREATE OR REPLACE PROCEDURE its_jc IS
M_COMMIT_CNT NUMBER; M_CURSOR_ID INTEGER; M_ROWS_PROC INTEGER; M_REC_COUNT INTEGER;
CURSOR material IS
SELECT act.project_id,
act.task_id,
cal.fiscal_year,
cal.period,
SUM(act.cost_amt) AMOUNT
FROM gprod.je_sub js,
gprod.je_det jd,
gprod.pmxject xref,
gprod.pmctact act,
calendar cal
WHERE js.je_ccn = '29'
AND js.je_ccn = jd.je_ccn
AND js.je = jd.je
AND js.je_sub = jd.je_sub
AND jd.je_ccn = xref.je_ccn
AND jd.je = xref.je
AND jd.je_sub = xref.je_sub
AND jd.je_line = xref.je_line
AND xref.ccn = act.ccn
AND xref.project_id = act.project_id
AND xref.task_id = act.task_id
AND xref.pmctact_seq = act.pmctact_seq
AND js.asof_date BETWEEN cal.beg_date
AND cal.end_date
AND act.application = 'MM'
AND SUBSTR(act.gl_acct, 1, 6) IN
('114000','114100','114102','114200','114321','114322','114325','114330','114331','114370','999994')
GROUP BY act.project_id,
act.task_id,
cal.fiscal_year,
cal.period;
/* nine more cursors */
/* Transfer Material Costs */
M_COMMIT_CNT := 0;
FOR mat_rec IN material LOOP
/* Attempt to Locate Current Record */
SELECT COUNT(*) INTO M_REC_COUNT
FROM its_jobcost_stage
WHERE project_id = mat_rec.project_id
AND task_id = mat_rec.task_id
AND fiscal_year = mat_rec.fiscal_year
AND period = mat_rec.period;
/* Does a Record Exist */
IF M_REC_COUNT <> 0 THEN
/* Update Current Record */
UPDATE its_jobcost_stage
SET mm_recpts = mm_recpts + mat_rec.amount
WHERE project_id = mat_rec.project_id
AND task_id = mat_rec.task_id
AND fiscal_year = mat_rec.fiscal_year
AND period = mat_rec.period;
ELSE
/* Add New Record */
INSERT INTO its_jobcost_stage
VALUES(mat_rec.project_id,
mat_rec.task_id,
mat_rec.fiscal_year,
mat_rec.period,
mat_rec.amount,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0);
END IF;
/* Check for Commit */
IF M_COMMIT_CNT = 100 THEN
COMMIT;
M_COMMIT_CNT := 0;
END IF;
END LOOP;
INSERT INTO ITS_JC_TIMELOG VALUES(410,sysdate);
COMMIT;
/* nine more insert/updates */
Last few lines of code
/* Delete Data in the User Table */
M_CURSOR_ID := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(M_CURSOR_ID, 'TRUNCATE TABLE its_jobcost',
DBMS_SQL.NATIVE);
M_ROWS_PROC := DBMS_SQL.EXECUTE(M_CURSOR_ID);
DBMS_SQL.CLOSE_CURSOR(M_CURSOR_ID);
/* Copy to User Table */
INSERT INTO its_jobcost SELECT * FROM its_jobcost_stage;
/* Indicate Regen Time */
UPDATE its_last_jc_regen SET regen_date = SYSDATE;
INSERT INTO ITS_JC_TIMELOG VALUES(918,sysdate);
COMMIT;
END;
Note how the 3rd to last line inserts a line number (918) and a
timestamp into a log table that I have created. I do this about 10
times throughout the code. The job takes less then 60 seconds to run
according to dba_jobs and according to my its_jc_timelog table.
This is 8i on HP Unix.
Thanks for your help. If I left any information out, let me know and I will provide it. It is late and I may have forgotten something, don't burn me at the Proverbial Newsgroup Stake because I missed something.... Received on Wed Jul 13 2005 - 21:09:59 CDT
![]() |
![]() |