Thread: Problem with stored procedure
Hello, In this example, I use 2 tables : create table types ( typnum integer primary key, catcode varchar(2), typlib varchar(35)); create table uv ( uvnum varchar(5) primary key, typnum integer, uvlib varchar(50)); alter table uv add constraint fk_uv_type foreign key (typnum) references types (typnum) on delete restrict on update restrict; I also use stored procedures : create function numtype(varchar) returns integer as ' declare codetype alias for $1; coderet integer; begin select into coderet typnum from types where typcode = codetype and catcode = ''UV''; return coderet; end; ' language 'plpgsql'; create function insert_uv(varchar,varchar,varchar) returns integer as ' declare codeuv alias for $1; codetype alias for $2; libuv alias for $3; cletype integer; begin select into cletype numtype(codeuv); insert into uv values (codeuv, cletype, libuv); return cletype; end; ' language 'plpgsql'; When I do : select insert_uv('SGBD','DUVC','TEST BD'); I get the following message : ERROR: insert or update on table "uv" violates foreign key constraint "fk_uv_caracteri_type" DETAIL: Key (typnum)=(43) is not present in table "types". I don't kown why. Anyone has an idea ? With best regards, Patrice
Attachment
Patrice OLIVER wrote: [snip] > create function insert_uv(varchar,varchar,varchar) returns integer as ' > declare > codeuv alias for $1; > codetype alias for $2; > libuv alias for $3; > cletype integer; > begin > select into cletype numtype(codeuv); > insert into uv values (codeuv, cletype, libuv); > return cletype; > end; > ' language 'plpgsql'; > > When I do : > > select insert_uv('SGBD','DUVC','TEST BD'); > I get the following message : > ERROR: insert or update on table "uv" violates foreign key constraint > "fk_uv_caracteri_type" > DETAIL: Key (typnum)=(43) is not present in table "types". > > I don't kown why. Before your "insert into" add: RAISE NOTICE ''cletype = %'', cletype; This will show what value cletype has. Presumably it's 43 and you don't have an equivalent row in "types". Or have I misunderstood the problem? -- Richard Huxton Archonet Ltd
Patrice OLIVER wrote: > Hello, > > In this example, I use 2 tables : > create table types ( > typnum integer primary key, > catcode varchar(2), > typlib varchar(35)); > > create table uv ( > uvnum varchar(5) primary key, > typnum integer, > uvlib varchar(50)); > > alter table uv > add constraint fk_uv_type foreign key (typnum) > references types (typnum) > on delete restrict on update restrict; > > I also use stored procedures : > > create function numtype(varchar) returns integer as ' > declare > codetype alias for $1; > coderet integer; > begin > select into coderet typnum from types > where typcode = codetype and catcode = ''UV''; why not -> select *typenum* into coderet from types where typcode = codetype and catcode = ''UV'';