Thank you, Rob - On Fri, Dec 2, 2016 at 11:12 AM, Rob Sargent <[email protected]> wrote:
> > > On Dec 2, 2016, at 2:52 AM, Alexander Farber <[email protected]> > wrote: > > > > CREATE OR REPLACE FUNCTION words_unban_user( > > in_uid integer) > > RETURNS integer AS > > $func$ > > UPDATE words_users SET > > banned_until = null, > > banned_reason = null > > WHERE uid = in_uid > > RETURNING uid; -- returns the user to be notified > > > > $func$ LANGUAGE sql; > > > > words=> SELECT uid FROM words_unban_user(1); > > ERROR: column "uid" does not exist > > LINE 1: SELECT uid FROM words_unban_user(1); > > ^ > > > select words_unban_user(1) as uid; > Your function returns an int not a table. this has worked well. However if I rewrite the same function as "language plpgsql" - then suddenly both ways of calling work: CREATE OR REPLACE FUNCTION words_unban_user( in_uid integer, OUT out_uid integer) RETURNS integer AS $func$ BEGIN UPDATE words_users SET banned_until = null, banned_reason = null WHERE uid = in_uid RETURNING uid into out_uid; END $func$ LANGUAGE plpgsql; words=> select out_uid AS uid from words_unban_user(1); uid ----- 1 (1 row) words=> select words_unban_user(1) AS uid; uid ----- 1 (1 row) I am curious, why is it so... Regards Alex
