Re: user-defined not working

From: "Josh Berkus" <josh(at)agliodbs(dot)com>
To: "Patrick Hatcher" <PHatcher(at)macys(dot)com>, pgsql-novice(at)postgresql(dot)org
Subject: Re: user-defined not working
Date: 2002-02-06 06:01:12
Message-ID: web-686137@davinci.ethosmedia.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

Patrick,

> Hello. I'm trying to create my first function. However, when I try
> to
> compile, I get an error message: Unrecognized language specified in
> a
> CREATE FUNCTION: 'plpgsql'

Ah. Go to the command line. Switch to the postgres user (whoever owns
the PostgreSQL directories). Run:
createlang plpgsql template1

Additionally, if you have already created other databases, you need to
run
createlang plpgsql database-name
for each database as the database owner (the user who created the
database).

> '---Start function--
> CREATE Function OwnedGoods
> ( varchar(6)
> , varchar(2)

Don't designate VARCHAR sizes when using them as function variables.
Just "VARCHAR".

> , int
> , int
> , int
> , int
> , int
> , int
> ) RETURNS integer
> as '
>
> DECLARE
> GMM_ID ALIAS FOR $1;
> Div_ID ALIAS FOR $2;
> Loc1 ALIAS FOR $3;
> Loc2 ALIAS FOR $4;
> Loc3 ALIAS FOR $5;
> Loc120 ALIAS FOR $6;
> Loc15 ALIAS FOR $7;
> Cheshire ALIAS FOR $8;
> Total Int

I highly reccommend that you consider changing your coding practices.
I think that you will find in PL/pgSQL that mixed-case variable names
are more trouble than they're worth.

>
> Begin
>
> IF GMM_ID = ''0001'' THEN
> IF Div_id = ''15'' or Div_id = ''16'' or Div_id = ''17''
> or
> Div_id = ''23'' THEN
> Total = sum(Loc120 + Loc3 )
> Else
> Total = sum(Cheshire)
> END IF;
> END IF;
> IF GMM_ID = ''0002'' THEN
> Total = sum(loc15 + Loc3)
> END IF;
> IF GMM_ID = ''0006'' or GMM_ID = ''0007'' THEN
> Total = sum(Loc1 + loc2 +Cheshire)
> END IF;
> IF GMM_ID = ''0008'' THEN
> IF Div_id = ''99'' THEN
> Total = sum(Loc120 + Loc3 )
> END IF;
> END IF;
> IF GMM_ID = ''0003'' or GMM_ID = ''0005'' or GMM_ID = ''0009''
> or
> GMM_ID = ''999'' THEN
> Total = sum(Cheshire)
> END IF;
> IF GMM_ID is null or Div_id=''00'' THEN
> Total = sum(Cheshire)
> END IF;
>
> Return Total;
> END;
> ' LANGUAGE 'plpgsql';

Hmmm... you've got a bunch of other syntax problems here (too many to
list). Have you read the full documentation for PL/pgSQL? Also
consult some Oracle PL/SQL books; PL/pgSQL was written to be
syntax-compatible with PL/SQL.

> Patrick Hatcher
> Macys.Com
> Legacy Integration Developer
> 415-932-0610 office

Tell you what ... if we can boast online that Macy's uses PostgreSQL,
you may be able to get some one-on-one online free support.

-Josh

______AGLIO DATABASE SOLUTIONS___________________________
Josh Berkus
Complete information technology josh(at)agliodbs(dot)com
and data management solutions (415) 565-7293
for law firms, small businesses fax 621-2533
and non-profit organizations. San Francisco

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message Stephen Ingram 2002-02-06 06:01:58 Re: user-defined not working
Previous Message Patrick Hatcher 2002-02-05 21:32:32 user-defined not working