| From: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
|---|---|
| To: | jack <datactrl(at)tpg(dot)com(dot)au> |
| Cc: | pgsql-sql(at)postgresql(dot)org |
| Subject: | Re: call the same pl/pgsql procedure twice in the same connection |
| Date: | 2002-03-25 21:06:39 |
| Message-ID: | 200203252106.g2PL6dv16423@candle.pha.pa.us |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-sql |
jack wrote:
> I have a function with pl/pgSQL such as...
> CREATE FUNCTION comp_userExp (TEXT) RETURNS INTEGER AS '
> DECLARE
> stUserName TEXT;
> BEGIN
> stUserName := upper($1);
>
> CREATE TEMP TABLE comuser AS
> SELECT * FROM comt_user1
> WHERE userName=stUserName;
>
> CREATE TEMP TABLE comUser1 AS
> SELECT a.userName FROM comt_user2 a, comuser b
> WHERE a.userName = b.userName
> ORDER BY b.userName;
>
> CREATE TEMP TABLE comUser2 AS
> SELECT a.userName FROM comt_user3 a, comuser b
> WHERE a.userName = b.userName
> ORDER BY b.userName;
>
> DROP Table comuser,comuser1,comuser2;
>
> RETURN 0;
>
> END;'
> LANGUAGE 'PLPGSQL';
>
> This function can't run twice in the same connection session. After tracing
> error, the reason is because 2nd and 3rd SQL refer to table comuser. It will
> cause "can't find relation number xxxxx". I think ,after first run, the
> procedure just use relation number to access table, while actually table was
> dropped and create again with a different relation number on the 2nd time.
> If I disconnect database, and re-connect again, it won't cuase any problem.
> If don't want to disconnect and connect, is there any way to fix the
> problem?
Yes, this is coming up a lot recently, maybe an FAQ. You need to use
EXECUTE in plpgsql so the string is reparsed every time and the proper
oid assigned.
--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Bruce Momjian | 2002-03-25 21:15:54 | Re: 16 parameter |
| Previous Message | Bruce Momjian | 2002-03-25 21:05:29 | Re: About temporary table |