Re: Why is this function wrong

From: Csaba Nagy <nagy(at)ecircle-ag(dot)com>
To: Johan Wehtje <joweht(at)tpgi(dot)com(dot)au>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Why is this function wrong
Date: 2005-10-24 16:49:19
Message-ID: 1130172558.27587.272.camel@coppola.muc.ecircle.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

The variant you're showing here has absolutely no quoting for the
function body. You need to quote the body, and escape the quotes you
have inside the body (in this example you don't have any).
Wrap the body in BEGIN ... END.
Also put semicolons after each statement end.

Corrected code:

CREATE OR REPLACE FUNCTION "public"."cproc_hli" (bgtemp NUMERIC,
humidity NUMERIC, wspeed NUMERIC) RETURNS NUMERIC AS '
BEGIN
IF ($1 < 25)
THEN
SELECT (10.66 * (0.28 * $2)+(1.3 * $1) - $3);
ELSE
SELECT (8.62 * (0.38 * $2) + (1.55 * $1) - (0.5 * $3) + (exp(- $3 +
2.4)));
END IF;
END
' LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY
INVOKER;

HTH,
Csaba.

On Mon, 2005-10-24 at 18:27, Johan Wehtje wrote:
> This is probably obvious but I am not seeing what is going wrong with
> this function definition:
>
> CREATE OR REPLACE FUNCTION "public"."cproc_hli" (bgtemp NUMERIC,
> humidity NUMERIC, wspeed NUMERIC) RETURNS NUMERIC AS
> IF ($1 < 25)
> THEN
> SELECT (10.66 * (0.28 * $2)+(1.3 * $1) - $3);
> ELSE
> SELECT (8.62 * (0.38 * $2) + (1.55 * $1) - (0.5 * $3) + (exp(- $3 + 2.4)))
> END IF
> LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
> ERROR: syntax error at or near "IF" at character 119
> LINE 2: IF ($1 < 25)
>
> I have tried with dollar quoting around the function body, changing the
> maguage to sql and using CASE ... WHEN instead of IF , tried Brackets
> and no brackets around the Boolean expression.. and a number of other
> variations, as well as rereading the Documentation.
>
> I have also tried not having aliases/names for the arguments.
>
> In every case I always get the syntax error directly after "AS".
>
> Can somebody point what is probably obvious.
>
> Cheers
> Johan Wehtje
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings

In response to

Browse pgsql-general by date

  From Date Subject
Next Message shakahshakah@gmail.com 2005-10-24 16:51:45 Re: Why is this function wrong
Previous Message Marc Munro 2005-10-24 16:35:55 Re: [pgsql-general] Daily digest v1.5657 (16 messages)