Обсуждение: Select in function?

Поиск
Список
Период
Сортировка

Select in function?

От
Alfonso Peniche
Дата:
I have the following function:

CREATE FUNCTION RegistrarDesconexion( integer )
RETURNS integer
AS '
    BEGIN
        UPDATE BitacoraConexion
        SET Desconexion = CURRENT_TIMESTAMP
        WHERE IdBitacoraConexion = $1;
        SELECT Desconexion FROM BitacoraConexion
        WHERE IdBitacoraConexion = $1;
        IF FOUND THEN
            RETURN 1;
        ELSE
            RETURN 0;
        END IF;
    END;'
LANGUAGE 'plpgsql';

and if I run:
select registrardesconexion (5);

I get the following error:
ERROR:  unexpected SELECT query in exec_stmt_execsql()

I don't know what's wrong, though I assume it's saying I'm not allowed
to use the select statement where it is.

Any ideas or comments.

Thanx.


Re: Select in function?

От
Stephan Szabo
Дата:
It wants you to do a
SELECT INTO <var> ...
in the function, something like

'DECLARE
  rec RECORD
 BEGIN
  ...
  SELECT INTO rec Desconexion FROM BitacoraConexion
  ...
'


On Tue, 6 Feb 2001, Alfonso Peniche wrote:

> I have the following function:
>
> CREATE FUNCTION RegistrarDesconexion( integer )
> RETURNS integer
> AS '
>     BEGIN
>         UPDATE BitacoraConexion
>         SET Desconexion = CURRENT_TIMESTAMP
>         WHERE IdBitacoraConexion = $1;
>         SELECT Desconexion FROM BitacoraConexion
>         WHERE IdBitacoraConexion = $1;
>         IF FOUND THEN
>             RETURN 1;
>         ELSE
>             RETURN 0;
>         END IF;
>     END;'
> LANGUAGE 'plpgsql';
>
> and if I run:
> select registrardesconexion (5);
>
> I get the following error:
> ERROR:  unexpected SELECT query in exec_stmt_execsql()
>
> I don't know what's wrong, though I assume it's saying I'm not allowed
> to use the select statement where it is.
>
> Any ideas or comments.
>
> Thanx.
>


Re: Select in function?

От
andrew@modulus.org
Дата:
As per the documentation at:
http://postgresql.planetmirror.com/users-lounge/docs/7.0/user/c40874113.htm#AEN4207

When using SELECT in a PL/PGSQL function, you must either SELECT .. INTO or
use the PERFORM query if you don't care about the return value from a
SELECT.  If you wish to use the special FOUND variable, you have to SELECT
.. INTO.

Hope that helps,

Andrew.


On Tue, 6 Feb 2001, Alfonso Peniche wrote:

> I have the following function:
>
> CREATE FUNCTION RegistrarDesconexion( integer )
> RETURNS integer
> AS '
>     BEGIN
>         UPDATE BitacoraConexion
>         SET Desconexion = CURRENT_TIMESTAMP
>         WHERE IdBitacoraConexion = $1;
>         SELECT Desconexion FROM BitacoraConexion
>         WHERE IdBitacoraConexion = $1;
>         IF FOUND THEN
>             RETURN 1;
>         ELSE
>             RETURN 0;
>         END IF;
>     END;'
> LANGUAGE 'plpgsql';
>
> and if I run:
> select registrardesconexion (5);
>
> I get the following error:
> ERROR:  unexpected SELECT query in exec_stmt_execsql()
>
> I don't know what's wrong, though I assume it's saying I'm not allowed
> to use the select statement where it is.



Re: Select in function?

От
Alfonso Peniche
Дата:
Thanks all, it's working great now.

Cheers. :-)

andrew@modulus.org wrote:

> As per the documentation at:
> http://postgresql.planetmirror.com/users-lounge/docs/7.0/user/c40874113.htm#AEN4207
>
> When using SELECT in a PL/PGSQL function, you must either SELECT .. INTO or
> use the PERFORM query if you don't care about the return value from a
> SELECT.  If you wish to use the special FOUND variable, you have to SELECT
> .. INTO.
>
> Hope that helps,
>
> Andrew.
>
> On Tue, 6 Feb 2001, Alfonso Peniche wrote:
>
> > I have the following function:
> >
> > CREATE FUNCTION RegistrarDesconexion( integer )
> > RETURNS integer
> > AS '
> >     BEGIN
> >         UPDATE BitacoraConexion
> >         SET Desconexion = CURRENT_TIMESTAMP
> >         WHERE IdBitacoraConexion = $1;
> >         SELECT Desconexion FROM BitacoraConexion
> >         WHERE IdBitacoraConexion = $1;
> >         IF FOUND THEN
> >             RETURN 1;
> >         ELSE
> >             RETURN 0;
> >         END IF;
> >     END;'
> > LANGUAGE 'plpgsql';
> >
> > and if I run:
> > select registrardesconexion (5);
> >
> > I get the following error:
> > ERROR:  unexpected SELECT query in exec_stmt_execsql()
> >
> > I don't know what's wrong, though I assume it's saying I'm not allowed
> > to use the select statement where it is.