Обсуждение: ERROR: syntax error at or near "select" at character 9
Hi
I am using PG 8.0 on Win32, learning SQL.
I dod create a table with the following SQL:
  CREATE TABLE test (      id integer,      nev varchar(25),      datum timestamp  );
A sequence with:
  CREATE SEQUENCE "public"."test_azon_seq"      INCREMENT 1  MINVALUE 101      MAXVALUE 9223372036854775807  START 101
   CACHE 1  ;
 
A before insert trigger:
  CREATE FUNCTION test_verif() RETURNS trigger AS $test_verif$      BEGIN          NEW.id := select
nextval('test_azon_seq');         NEW.nev := nev;          NEW.datum := current_timestamp;          RETURN NEW;
END; $test_verif$ LANGUAGE plpgsql  ;
 
  CREATE TRIGGER test_verif BEFORE INSERT ON test      FOR EACH ROW EXECUTE PROCEDURE test_verif()  ;
When I issue the
  insert into "public"."test" (nev) values ('Graf László');
insert statement, it returns
"ERROR:  syntax error at or near "select" at character 9".
Why? What is wrong?
-- 
László Graf
			
		
On Fri, 2 Sep 2005, [ISO-8859-2] Graf L�szl� wrote:
>
>    CREATE FUNCTION test_verif() RETURNS trigger AS $test_verif$
>        BEGIN
>            NEW.id := select nextval('test_azon_seq');
I think you want to remove select here, you're already effectively doing a
select of the right hand side in the assignment.
>            NEW.nev := nev;
I think you want to remove this line entirely.  What nev were you
expecting on the right hand side?  If it's the new one, well, NEW.new is
already that.
			
		In article <20050905213103.F5782@megazone.bigpanda.com>,
Stephan Szabo <sszabo@megazone.bigpanda.com> writes:
> On Fri, 2 Sep 2005, [ISO-8859-2] Graf László wrote:
>>
>> CREATE FUNCTION test_verif() RETURNS trigger AS $test_verif$
>> BEGIN
>> NEW.id := select nextval('test_azon_seq');
> I think you want to remove select here, you're already effectively doing a
> select of the right hand side in the assignment.
>> NEW.nev := nev;
> I think you want to remove this line entirely.  What nev were you
> expecting on the right hand side?  If it's the new one, well, NEW.new is
> already that.
László could also remove the entire trigger and use something like
CREATE TABLE test ( id SERIAL NOT NULL, nev VARCHAR(25), datum TIMESTAMP NOT NULL DEFAULT current_timestamp, PRIMARY
KEY(id) 
);
			
		On Tue, 6 Sep 2005, Harald Fuchs wrote:
> In article <20050905213103.F5782@megazone.bigpanda.com>,
> Stephan Szabo <sszabo@megazone.bigpanda.com> writes:
>
> > On Fri, 2 Sep 2005, [ISO-8859-2] Graf László wrote:
>
> >>
> >> CREATE FUNCTION test_verif() RETURNS trigger AS $test_verif$
> >> BEGIN
> >> NEW.id := select nextval('test_azon_seq');
>
> > I think you want to remove select here, you're already effectively doing a
> > select of the right hand side in the assignment.
>
> >> NEW.nev := nev;
> > I think you want to remove this line entirely.  What nev were you
> > expecting on the right hand side?  If it's the new one, well, NEW.new is
> > already that.
>
> László could also remove the entire trigger and use something like
>
>
> CREATE TABLE test (
>   id SERIAL NOT NULL,
>   nev VARCHAR(25),
>   datum TIMESTAMP NOT NULL DEFAULT current_timestamp,
>   PRIMARY KEY (id)
> );
That's slightly different though.  The trigger forces the value whether or
not a value was assigned in the insert, the defaults only apply if the
column does not have a value given to it.