Re: Help with CREATE FUNCTION

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Kip Warner <kip(at)thevertigo(dot)com>
Cc: Sándor Daku <daku(dot)sandor(at)gmail(dot)com>, "pgsql-novice(at)postgresql(dot)org" <pgsql-novice(at)postgresql(dot)org>
Subject: Re: Help with CREATE FUNCTION
Date: 2016-04-18 17:57:26
Message-ID: CAKFQuwaTuvi8k6Myz=7swwZuF0u+kjLHw+Mg8r48NyRqcF8d3Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

On Monday, April 18, 2016, Kip Warner <kip(at)thevertigo(dot)com> wrote:

> On Mon, 2016-04-18 at 08:00 -0700, David G. Johnston wrote:
> > Arguably its still stupid :)
> >
> > SELECT [...]
> > FROM (SELECT * FROM my_table WHERE id = arg_id_a) AS ta
> > CROSS JOIN (SELECT * FROM my_table WHERE id = arg_id_b) AS tb
> >
> > David J.
>
> Thank you very much David and Sándor. If I understand correctly, the
> function should then look like so...
>
> DROP FUNCTION IF EXISTS my_function(id_a integer, id_b integer);
>
> constant1 CONSTANT float := 0.123;
> constant2 CONSTANT float := 0.456;
> constant3 CONSTANT float := 0.789;
>
> CREATE FUNCTION my_function(id_a integer, id_b integer) RETURNS float
> AS $$
> SELECT
> (constant1 * ABS(ta.col1 - tb.col1)) +
> (constant2 * ABS(ta.col2 - tb.col2)) +
> (constant3 * ABS(ta.col3 - tb.col3))
> FROM (SELECT * FROM my_table WHERE id = id_a) AS ta
> CROSS JOIN (SELECT * FROM my_table WHERE id = id_b) AS tb
> $$ LANGUAGE SQL;
>
> SELECT my_function(1,2) AS similarity;
>
> I've looked at the syntax for the constants and they are giving me a
> syntax error. I also tried flanking them with a DECLARE, BEGIN, END,
> but same problem.
>
>
Begin/end etc only work for pl/pgsql functions.

What version of PostgreSQL?

David J.

In response to

Responses

Browse pgsql-novice by date

  From Date Subject
Next Message David G. Johnston 2016-04-18 17:58:54 Re: Help with CREATE FUNCTION
Previous Message Kip Warner 2016-04-18 17:26:26 Re: Help with CREATE FUNCTION