Another UPDATE CURRENT problem
Previously I have post a PL/SQL block to demonstrate error
of "UPDATE ... WHERE CURRENT OF ..". Here's the 2nd version:
1 DECLARE
2 CURSOR c1 IS
3 ( SELECT k1, f2
4 FROM geotab2 )
5 FOR UPDATE OF st;
6 upd_st geotab2.st%type;
7 BEGIN
8 FOR rec IN c1 LOOP
9 UPDATE geotab1
10 SET f1 = rec.f2
11 WHERE k1 = rec.k1;
12 IF SQL%FOUND THEN
13 upd_st := 'Y';
14 ELSE
15 upd_st := 'N';
16 END IF;
17 UPDATE geotab2
18 SET st = upd_st
19 WHERE CURRENT OF c1;
20 END LOOP;
21* END;
UPDATE geotab2
*
ERROR at line 17:
ORA-06550: line 17, column 7:
PLS-00801: internal error [22602]
ORA-06550: line 17, column 7:
PL/SQL: SQL Statement ignored
Interestingly, when I modified the PL/SQL Block as followed, the
problem is fixed and the code achieved what I expected:
1 DECLARE
2 CURSOR c1 IS
3 ( SELECT k1, f2
4 FROM geotab2 )
5 FOR UPDATE OF st;
6 upd_st geotab2.st%type;
7 BEGIN
8 FOR rec IN c1 LOOP
9 UPDATE geotab1
10 SET f1 = rec.f2
11 WHERE k1 = rec.k1;
12 IF SQL%FOUND THEN
13 upd_st := 'Y';
14 ELSE
15 upd_st := 'N';
16 END IF;
17 UPDATE geotab2
18 SET st = upd_st
19 WHERE k1 = rec.k1;
20 END LOOP;
21* END;
PL/SQL procedure successfully completed.
Note that the WHERE clause "CURRENT OF c1" is changed to "k1 =
rec.k1". k1 is the primary key of both table geotab1 and geotab2.
Also, I am now using Oracle8i Release 8.1.6.0.0.
What's going wrong? Should I patch the Oracle Software?