Thread

  1. correlative insertion

    Jorge Maturana <ateo@labsd.inf.utfsm.cl> — 1998-10-13T22:18:30Z

    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
    
    
    
  2. Re: [SQL] correlative insertion

    Herouth Maoz <herouth@oumail.openu.ac.il> — 1998-10-14T09:49:23Z

    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