Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Six of one . . .
Platform: Oracle 8.1.7 on NT4
Developer is involved in a project of converting an application (written in Microfocus Cobol) from DB2/2 on OS/2 to Oracle on NT. The general problem at hand is to identify a selection of rows, sorted ascending by a 'timestamp' field (implemented in our 8.1.7 db as a char(26)), processing each row in turn. Processing of each row includes modifying a 'status' column that removes it from the original selection criteria.
In the original application, it is implemented as shown with this pseudo code:
Begin loop
SELECT MIN(CTE_DTS)
INTO :ws-dts
FROM MY_TABLE
WHERE APPC_STA = 'P'
AND CTE_DTS > '0001-01-01-00.00.00.000000'
UPDATE my_table
SET appc_sta = 'Z'
WHERE APPC_STA = 'P'
AND CTE_DTS = :ws-dts
commit
End loop
---- end pseudo code example -----
She was having some difficulty with inconsistent results, which I chalked up to inconsistent test cases. (She's a fairly inexperienced programmer, and this is her first exposure to Oracle). By the time I was able to take a look at it, she had replaced the above with a cursor, thusly;
Declare cursor c1 as
SELECT CTE_DTS
FROM MY_TABLE
WHERE APPC_STA = 'P'
AND CTE_DTS > '0001-01-01-00.00.00.000000' ORDER BY CTE_DTS
Loop until no-more-rows
Fetch cursor c1 into . . . .
Do a bunch of processing
Update row returned by the fetch
commit
end loop
---- end pseudo code example -----
So now I'm wondering how to adviser her on the best approach from an Oracle standpoint. Which general approach would be preferred? My gut feel is the cursor loop.
Begin-loop
SELECT MIN(timestamp-field)
WHERE condition-1
UPDATE so that condition-1 is no longer true
COMMIT
End-loop
OR . . .
DECLARE CURSOR
WHERE condition-1
ORDER BY timestamp-field
Begin-loop
FETCH CURSOR
UPDATE so that condition-1 is no longer true
COMMIT
End-loop
I'm shooting from the hip here, so I may have missed some detail, but if you remember that I'm only presenting pseudo code, the general problem and question should be apparent.
--
Ed Stevens
(Opinions expressed do not necessarily represent those of my employer.)
Received on Tue Sep 17 2002 - 14:09:29 CDT