Re: functions
От | Jasen Betts |
---|---|
Тема | Re: functions |
Дата | |
Msg-id | homfpu$vfk$1@reversiblemaps.ath.cx обсуждение исходный текст |
Ответ на | functions (Kent Scott <kscott@logicalsi.com>) |
Список | pgsql-novice |
On 2010-03-27, Kent Scott <kscott@logicalsi.com> wrote: > I am having a hard time coming from MS SQL in terms of creating > functions. Minor things keep you from being able to create functions > that are not an issue in MS SQL so I need help in understanding why they > are an issue so that I can ultimately create the functions that I need > to. I can create and run the following function fine : > > CREATE FUNCTION listSales(dt date,movie text) RETURNS SETOF ticket AS > $$ > BEGIN > select * from ticket where date = $1 and mov_num = $2; > END; > $$ > LANGUAGE SQL; doesn't work for me, I get a syntax error at select. If I remove BEGIN and END; it works. > however, the following will not create : > CREATE FUNCTION listSales(dt date,movie text) RETURNS SETOF ticket AS > $$ > declare > r1 int; > BEGIN > select * from ticket where date = $1 and mov_num = $2; > END; > $$ > LANGUAGE SQL; > > I get a syntax error on r1 int and I have no idea why. Am I not allowed > to declare variables if they are not used? PLPGSQL id a different language to SQL. DECLARE, BEGIN, and END; ( used in this way) are PLPGSQL not SQL. SELECT is not the way to return values from a PLPGSQL function. The following is roughly equivalent to the corrected version of your SQL function above. CREATE OR REPLACE FUNCTION listSales(dt date,movie text) RETURNS SETOF ticket AS $$ declare r1 integer; t ticket; BEGIN for t IN select * from ticket where date = $1 and mov_num = $2 loop return next t; end loop; return; END; $$ LANGUAGE PLPGSQL;
В списке pgsql-novice по дате отправления: