Re: PL/pgSQL Function Problem
От
Doug McNaught
Тема
Re: PL/pgSQL Function Problem
Дата
Msg-id
87pt4sap0h.fsf@asmodeus.mcnaught.org
Ответ на
PL/pgSQL Function Problem (the inquirer)
Список
Дерево обсуждения
PL/pgSQL Function Problem the inquirer <listquestions@yahoo.com>
Re: [SQL] PL/pgSQL Function Problem Michalis Kabrianis <mk@interzone.gr>
Re: PL/pgSQL Function Problem Tom Lane <tgl@sss.pgh.pa.us>
Re: PL/pgSQL Function Problem Doug McNaught <doug@mcnaught.org>
the inquirer writes:
> ERROR: syntax error at or near "$1" at character 14
> CONTEXT: PL/pgSQL function "create_author" line 7 at
> SQL statement
PL/pgSQL errors are sometimes obscure. I'll try to comment on what
looks wrong to me...
> CREATE OR REPLACE FUNCTION create_author (
> VARCHAR(32), VARCHAR(32), VARCHAR(32) )
> RETURNS INTEGER AS '
> DECLARE
> name_ ALIAS FOR $1;
> username_ ALIAS FOR $2;
> password_ ALIAS FOR $3;
> authorid_ INTEGER;
> BEGIN
> CREATE USER username_ WITH ENCRYPTED PASSWORD
> password_ IN GROUP authors;
I can't tell you why, but my suspicion is that you need to use EXECUTE
in order to do CREATE USER in a function. Try that.
> INSERT INTO Authors
Be aware that, unless you double-quote the identifier, "Author" will
be folded to "author" by the SQL parser. This may also be causing a
problem--you didn't post your schema.
> ( Name, Username )
> VALUES
> ( $1, $2 );
> SELECT Max( AuthorID ) INTO authorid_ FROM Authors;
This is a potential race, depending on your transaction isolation
level. It would be better to find out the sequence name for your
SERIAL column and user currval('') as the return value.
Hope this helps!
-Doug
--
Let us cross over the river, and rest under the shade of the trees.
--T. J. Jackson, 1863
В списке pgsql-general по дате отправления