Re: [SQL] Are int4/int8 ops defined?

From: José Soares <jose(at)sferacarta(dot)com>
To: Min Qiu <minq(at)uu(dot)net>
Cc: pgsql-sql(at)postgreSQL(dot)org
Subject: Re: [SQL] Are int4/int8 ops defined?
Date: 1999-06-23 13:56:59
Message-ID: 3770E7AB.B31B6F77@sferacarta.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Min Qiu ha scritto:

> Hi,
>
> I'm new to postgresql and learning writing the trigger.
> Included below was one of the execise I did. It kept
> producing an error message that suggested the operater '-'
> was undefined for int8/int4. Since both int8 and int4
> are the basic types, I believed I might miss something.
>
> Appology for the long post and thanks for any advise,
>
> Min
>
> DROP trigger t_diff on tb_cnt32;
> DROP function f_diff();
> DROP TABLE tb_cnt32;
>
> create table tb_cnt32 (t int8, s int8, v int8);
> insert into tb_cnt32 values (0, 0, 0);
>
> --
> -- diff function
> --
> create function f_diff() returns opaque as '
> declare
> prev record;
> begin
> select into prev * from tb_cnt32 where t=(select max(t) from tb_cnt32);
> -- can not do
> -- select into prev * from tb_cnt32 where t=max(t);
> -- ^^^^^
> if not found then
> raise exception ''Empty table tb_cnt32???'';
> end if;
>
> prev.v=new.v-prev.v;
> update tb_cnt32 set v=prev.v where t=prev.t;
>
> return new;
> end;
> ' language 'plpgsql';
>
> --
> -- t_diff trigger
> --
> create trigger t_diff
> before insert on tb_cnt32
> for each row
> execute procedure
> f_diff();
>
> insert into tb_cnt32 values (1000, 5, 10);
> ERROR: There is no operator '-$' for types 'int8' and 'int4'
> You will either have to retype this query using an explicit cast,
> or you will have to define the operator using CREATE OPERATOR
>

May be this should be avoid by separate sign minus (-) with spaces.
eg: prev.v = new.v - prev.v;

>
> Following the hint of the error message, I trid casting prev.v::int8,
> new.v::int4 and prev.v::int4. But the results were the same.
>
> I'm using v6.5 on Linux 2.0.35 with gcc version egcs-2.91.66.
> psql \df listed:
> ...
> int8 |int8div |int8 int8 |divide
> int8 |int8larger |int8 int8 |larger of two
> int8 |int8mi |int8 int8 |subtraction
> int8 |int8mul |int8 int8 |multiply
> int8 |int8pl |int8 int8 |addition
> int8 |int8smaller |int8 int8 |smaller of two
> int8 |int8um |int8 |unary minus
> ...

______________________________________________________________
PostgreSQL 6.5.0 on i586-pc-linux-gnu, compiled by gcc 2.7.2.3
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jose'

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Min Qiu 1999-06-23 14:17:50 Re: [SQL] Are int4/int8 ops defined?
Previous Message Darren Greer 1999-06-23 11:54:20 oidrand question