Re: call the same pl/pgsql procedure twice in the same connection

Поиск
Список
Период
Сортировка
От Jan Wieck
Тема Re: call the same pl/pgsql procedure twice in the same connection
Дата
Msg-id 200203252136.g2PLaEg25650@saturn.janwieck.net
обсуждение исходный текст
Ответ на Re: call the same pl/pgsql procedure twice in the same connection  (Bruce Momjian <pgman@candle.pha.pa.us>)
Ответы Re: call the same pl/pgsql procedure twice in the same connection  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: call the same pl/pgsql procedure twice in the same connection  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-sql
Bruce Momjian wrote:
> 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.
   This  is  somehow connected to the temporary view discussion,   as it  needs  the  same  detection  if  a  query
depends on   temporary  objects.  As soon as we have a detection mechanism   for it, I can modify PL/pgSQL not to save
preparedplans  for   these statements.
 


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #



_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com



В списке pgsql-sql по дате отправления:

Предыдущее
От: chester c young
Дата:
Сообщение: Re: quickest query to check a table for existance of a value in a field
Следующее
От: Tom Lane
Дата:
Сообщение: Re: call the same pl/pgsql procedure twice in the same connection