Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> getting a Mutating error with a function:
I've seen this stuff with triggers, but not with functions. And in the function I am not even looking at field I am modifying...
Any suggestions?
SQL> update manager set div_rank=div_rnk(100) where user_id=10
2 /
update manager set div_rank=div_rnk(100) where user_id=10
*
ORA-01001: invalid cursor ORA-06512: at "SWBASEBALL.DIV_RNK", line 49 ORA-04091: table SWBASEBALL.MANAGER is mutating, trigger/function maynot see
CREATE OR REPLACE FUNCTION div_rnk (u IN NUMBER)
RETURN NUMBER IS
user NUMBER;
swp NUMBER;
ranck NUMBER;
prev_swp NUMBER;
counter NUMBER;
CURSOR c_div IS
SELECT m.user_id, NVL(m.total_sw_points, 0) FROM manager m, user_group ug WHERE m.user_id = ug.user_id AND ug.group_id = (SELECT group_id FROM user_group WHERE user_id = u AND rownum = 1) ORDER BY NVL(total_sw_points, 0) DESC;
BEGIN
ranck := 1;
prev_swp := -10000;
counter := 0;
OPEN c_div;
FETCH c_div INTO user, swp;
WHILE c_div%FOUND LOOP
IF swp != prev_swp THEN ranck := counter + 1; END IF; IF user = u THEN RETURN ranck; END IF; prev_swp := swp; counter := counter + 1; FETCH c_div INTO user, swp;
END LOOP;
CLOSE c_div;
EXCEPTION
WHEN OTHERS THEN
CLOSE c_div;
RAISE;
END div_rnk;
Andrey Dmitriev eFax: (978) 383-5892 Daytime: (917) 750-3630 AOL: NetComrade ICQ: 11340726 remove NSPAM to emailReceived on Thu May 11 2000 - 00:00:00 CDT