Обсуждение: Question about SQL FUnction
hi, i have some tables: create table person (nr int4, name varchar(50)); create table book(nr int4, title varchar(50), persnr int4); (persnr is the foreign key -> person.nr) now i have some CREATE FUNCTION get_new_nr(**TABLE**,**FIELDS**) RETURNS int4; AS 'SELECT MAX($2) FROM $1 +1;' LANGUAGE 'sql'; but **table** and **fields** needs some datatype. this function should return the max of a set of all numbers in person (+1) and return this. is it possible (and how ;-) to write such a very _flexible_ function?? MArtin
On Wed, 17 Feb 1999, Martin [iso-8859-1] M�derndorfer wrote:
> hi,
Hi Martin
>
> i have some tables:
>
> create table person (nr int4, name varchar(50));
> create table book(nr int4, title varchar(50), persnr int4);
>
> (persnr is the foreign key -> person.nr)
>
> now i have some
> CREATE FUNCTION get_new_nr(**TABLE**,**FIELDS**) RETURNS int4;
> AS 'SELECT MAX($2) FROM $1 +1;'
> LANGUAGE 'sql';
>
> but **table** and **fields** needs some datatype. this function should
> return the max of a set of all numbers in person (+1) and return this.
Are you trying to get the MAX($2) in order to calculate the next value for
the primaryy key ????
If that's true, i would recommend you to use sequences
>
> is it possible (and how ;-) to write such a very _flexible_ function??
>
> MArtin
>
Functions written in sql are not very flexible... you just can't use the
arguments very well. It is better to write C functions with libpq.
Adios amigo.
David Martinez Cuevas
Office 622-60-80 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Home 565-25-17 "Eat Linux, Drink Linux... SMOKE LINUX "
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>>>> "d" == derndorfer <Martin> writes:
d> hi,
d> i have some tables:
d> create table person (nr int4, name varchar(50));
d> create table book(nr int4, title varchar(50), persnr int4);
d> (persnr is the foreign key -> person.nr)
d> now i have some
d> CREATE FUNCTION get_new_nr(**TABLE**,**FIELDS**) RETURNS int4;
d> AS 'SELECT MAX($2) FROM $1 +1;'
d> LANGUAGE 'sql';
d> but **table** and **fields** needs some datatype. this function should
d> return the max of a set of all numbers in person (+1) and return this.
d> is it possible (and how ;-) to write such a very _flexible_ function??
d> MArtin
I think this is not possible in 'sql' and 'plpgsql' functions. You
must use Tcl or C languages for these function. But if you wont have
auto-increment unique field you can use sequences:
create sequence s_person;
create table person (
nr int default nextval('s_person') not null,
name varchar(50)
);
insert into person (name) values('itisme');
insert into person (name) values('andyou');
select * from person;
nr name
1 itisme
2 andyou
--
Anatoly K. Lasareff Email: tolik@icomm.ru
Senior programmer