Обсуждение: correlative insertion

Поиск
Список
Период
Сортировка

correlative insertion

От
Jorge Maturana Ortiz
Дата:
Hi,

I have a table 'mas' with the following composition:

Table    = mas
+----------------------------------+----------------------------------+-------+
|              Field               |              Type                | Length|
+----------------------------------+----------------------------------+-------+
| cha                              | char                             |     1 |
| num                              | int4                             |     4 |
+----------------------------------+----------------------------------+-------+

and this data:

  cha|num
---+---
    a  |  1
    a  |  2

I want to create a function that automatically increments the number stored in 'num' when i insert a new tuple if it contain a 'known' cha, for example, if i insert another 'a' in the field 'cha',  the num must be 3.

I try:

create function otro(char) returns int4 as 'select 1 + max(num) from mas where cha = $1;' language 'sql';

it works OK if i make the following:

insert into mas values ('a',otro('a'));

i obtain:

  cha|num
---+---
    a  |  1
    a  |  2
    a  |  3
 

THE PROBLEM is that when i try to insert a tuple with an unknow cha, this function don't work. I want make an insert like:

insert into mas values ('b',otro('b'));

and obtain:

  cha|num
---+---
    a  |  1
    a  |  2
    a  |  3
    b  |  1

I would thank any help.
 

-- 
Jorge Maturana Ortiz
Laboratorio de Sistemas Distribuidos - Departamento de Informatica
Universidad Tecnica Federico Santa Maria, Valparaiso - Chile
mailto:ateo@labsd.inf.utfsm.cl
 

Re: [SQL] correlative insertion

От
Herouth Maoz
Дата:
At 0:18 +0200 on 14/10/98, Jorge Maturana Ortiz wrote:


>
> create function otro(char) returns int4 as 'select 1 + max(num) from
> mas where cha = $1;' language 'sql';
>
> it works OK if i make the following:
>
> insert into mas values ('a',otro('a'));
>
> i obtain:
>
>   cha|num
> ---+---
>     a  |  1
>     a  |  2
>     a  |  3
>  
>
> THE PROBLEM is that when i try to insert a tuple with an unknow cha,
> this function don't work.

Doesn't work *how*? What does it do? In a cursory look, it seems as if the
function just returns NULL when the character is not known. If so, why
don't you define the num field in the table as NOT NULL DEFAULT 1? In that
case, inserting a NULL should invoke the default.

Herouth

--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma