Re: user-defined not working - Mailing list pgsql-novice

From Josh Berkus
Subject Re: user-defined not working
Date
Msg-id web-686137@davinci.ethosmedia.com
Whole thread Raw
In response to user-defined not working  ("Patrick Hatcher" <PHatcher@macys.com>)
List 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@agliodbs.com
   and data management solutions       (415) 565-7293
  for law firms, small businesses        fax 621-2533
    and non-profit organizations.      San Francisco

pgsql-novice by date:

Previous
From: Stephen Ingram
Date:
Subject: Re: user-defined not working
Next
From: Dominique Duflos
Date:
Subject: Connecting a postgresql client to an oracle7 db