Scott, Niall
wrote:
> Hi
>
> I need to create a autoincrement field but I can't use a fixed data type for reasons I won't go into.
> I need the field to be type integer.
> I thought that I would create a sequence then call it in a trigger thus
>
> Create table test1(
> teid integer,
> aValue Char(10)
> )
> --
> create sequence test1seq increment by 1 start with 1
> --
> CREATE TRIGGER test1_update FOR test1 AFTER INSERT EXECUTE (
> UPDATE dbasys.test1 set teid=test1seq.Nextval;
> )
> --
>
> I tried various trigger code but the above was the only one that didn't give errors
>
> I then used
> Insert into test1 (aValue) VALUES('Test 1')
> but all I get is a null value in teid.
>
> I have come to SAP DB from Interbase where the trigger code would be
> CREATE TRIGGER test1_update FOR TEST1
> ACTIVE BEFORE INSERT POSITION 0
> AS
> BEGIN
> new.teid=GEN_ID(test1seq,1);
> END
>
>
> But I can't figure out how to do the same in SAPDB
>
> Cheers
>
> I need to create a autoincrement field but I can't use a fixed data type for reasons I won't go into.
> I need the field to be type integer.
> I thought that I would create a sequence then call it in a trigger thus
>
> Create table test1(
> teid integer,
> aValue Char(10)
> )
> --
> create sequence test1seq increment by 1 start with 1
> --
> CREATE TRIGGER test1_update FOR test1 AFTER INSERT EXECUTE (
> UPDATE dbasys.test1 set teid=test1seq.Nextval;
> )
> --
>
> I tried various trigger code but the above was the only one that didn't give errors
>
> I then used
> Insert into test1 (aValue) VALUES('Test 1')
> but all I get is a null value in teid.
>
> I have come to SAP DB from Interbase where the trigger code would be
> CREATE TRIGGER test1_update FOR TEST1
> ACTIVE BEFORE INSERT POSITION 0
> AS
> BEGIN
> new.teid=GEN_ID(test1seq,1);
> END
>
>
> But I can't figure out how to do the same in SAPDB
>
> Cheers
Do you
really want to update ALL rows of the table if one
single
row is
added? Or did you just forgot to add some
where-clause
to your
update?
Your trigger update should look like
this:
CREATE TRIGGER test1_update FOR test1 AFTER INSERT
EXECUTE (
UPDATE dbasys.test1 set teid=test1seq.Nextval
UPDATE dbasys.test1 set teid=test1seq.Nextval
where syskey =
:syskey;
)
)
Your table has no primary key defined, but the
implicitly defined syskey
exists, which can be named in where-clauses and
select-lists.
But, why do you use a
trigger?
If your trigger looks really that small (and that is
not only a shortened example)
then your insert can be changed
from
Insert into test1 (aValue) VALUES('Test
1')
to
Insert into test1 VALUES(test1seq.Nextval, 'Test
1')
and you will not need a trigger any
more
or to make things even easier (but pay attention to the
not-updatability of
serial-columns), you can
define
teid integer default
serial
and the use
Insert into test1 (aValue) VALUES('Test
1')
without triggers.
Elke
SAP Labs
Berlin
