Ik wordt een beetje gek van het plpgsql momenteel. Volgens mij ben ik tenminste tegen een beperking aangelopen. Helaas ligt de postgresql website weer eens plat, dus in de archieven daar zoeken is geen optie. De manual leverd voor alsnog ook geen uitsluitsel (ja, die heb ik off-line, ivm de slechte bereikbaarheid van www.postgresql.org)
Goed, ik heb dus een functie gemaakt die zichzelf aanroept. Dit is de code:
Niet zo spannend volgens mij. Het id van een user wordt opgehaald a.h.v een username, als die niet bestaat wordt de default waarde opgehaald. Als ik deze functie aanroep krijg ik echter de volgende error:
ERROR: cursor "c_user" already in use
Een recursieve functie met een cursor is dus niet mogelijk? erg vreemd volgens mij, maar goed. Ik zit er mooi wel mee, want ik weet zo 123 geen workaround (behalve dan de cursor eruit te gooien en voor de select into optie te gaan).
Is er al eens iemand anders tegen dit probleem aangelopen en zo ja, wat voor oplossing heb je toe gekozen om hier omheen te werken? Het gaat overigens om postgresql 7.3.3
Goed, ik heb dus een functie gemaakt die zichzelf aanroept. Dit is de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| create or replace function get_user_id (users.username%type)
returns users.id%type
as '
declare
pv_username alias for $1;
lv_user_id users.id%type;
c_user cursor for select id from users where username = pv_username
union
select get_user_id (get_default_value(''username''));
begin
open c_user;
fetch c_user into lv_user_id;
close c_user;
return lv_user_id;
end;
' language plpgsql; |
Niet zo spannend volgens mij. Het id van een user wordt opgehaald a.h.v een username, als die niet bestaat wordt de default waarde opgehaald. Als ik deze functie aanroep krijg ik echter de volgende error:
ERROR: cursor "c_user" already in use
Een recursieve functie met een cursor is dus niet mogelijk? erg vreemd volgens mij, maar goed. Ik zit er mooi wel mee, want ik weet zo 123 geen workaround (behalve dan de cursor eruit te gooien en voor de select into optie te gaan).
Is er al eens iemand anders tegen dit probleem aangelopen en zo ja, wat voor oplossing heb je toe gekozen om hier omheen te werken? Het gaat overigens om postgresql 7.3.3
Egoist: A person of low taste, more interested in themselves than in me