pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Daryl Richter <daryl@brandywine.com>
To: Henry Ortega <juandelacruz@gmail.com>
Cc: Ragnar Hafstaư <gnari@simnet.is>
Cc: pgsql-sql@postgresql.org
Subject: Re: insert only if conditions are met?
Date: Wed, 31 Aug 2005 17:27:49 -0400
Message-ID: <431620D5.9080809@brandywine.com> (raw)
In-Reply-To: <2bffcc33050831094957be1b4a@mail.gmail.com>
References: <2bffcc33050831080942f806e1@mail.gmail.com>
	<20050831152534.GA18934@winnie.fuhr.org>
	<2bffcc3305083108487fb80cb2@mail.gmail.com>
	<2bffcc3305083108497ea6dcc6@mail.gmail.com>
	<1125506698.2605.22.camel@localhost.localdomain>
	<2bffcc33050831094957be1b4a@mail.gmail.com>

Henry Ortega wrote:
> Ok. Here's TABLE A
> 
> emp            date             hours       type
> JSMITH       08-15-2005   5             WORK
> JSMITH       08-15-2005   3             WORK
> JSMITH       08-25-2005   6             WORK
> 
> I want to insert the ff:
> 1.) JSMITH    08-15-2005    8    VAC
> 2.) DOE        08-16-2005    8    VAC
> 
> #1 should fail because there is already 8 hours entered as being
> Worked on 08-15-2005 (same date).
> 
> Any suggestions?

CREATE TABLE "tablea" (
	"emp"  	varchar(6) NOT NULL,
	"date" 	varchar(10) NOT NULL,
	"hours"	int NOT NULL,
	"type" 	char(4) NOT NULL
	);

grant select, insert, update, delete on tablea to public;

insert into tablea( emp, date, hours, type ) values( 'JSMITH', 
'08-15-2005', 5, 'WORK' );
insert into tablea( emp, date, hours, type ) values( 'JSMITH', 
'08-15-2005', 3, 'WORK' );
insert into tablea( emp, date, hours, type ) values( 'JSMITH', 
'08-25-2005', 6, 'WORK' );

create or replace function overtime( varchar, varchar, int, varchar ) 
returns void as '
    insert into tablea( emp, date, hours, type )
       select $1, $2, $3, $4
       from tablea where ( select sum( hours ) from tablea where emp = 
$1 and date = $2 group by emp, date ) + $3 <= 8
       union
       select $1, $2, $3, $4
       from tablea where( select sum( hours ) from tablea where emp = $1 
and date = $2 group by emp, date ) is null
' LANGUAGE SQL;

select overtime( 'JSMITH', '08-15-2005', 8, 'VAC' );	# REJECTED
select overtime( 'JSMITH', '08-16-2005', 8, 'VAC' );    # OK
select overtime( 'JSMITH', '08-25-2005', 2, 'WORK' );	# OK

select * from tablea;

> 
> 
> 
> 
> On 8/31/05, Ragnar Hafstaư < gnari@simnet.is <mailto:gnari@simnet.is> >
> wrote:
> 
> On Wed, 2005-08-31 at 11:49 -0400, Henry Ortega wrote:
> 
>>What I am trying to do is
>>* Insert a record for EMPLOYEE A to TABLE A
>>IF
>>the sum of the hours worked by EMPLOYEE A on TABLE A
>>is not equal to N 
>>
>>Is this possible?
> 
> 
> Sure, given a suitable schema
> 
> It is not clear to me, if the hours worked are
> to be found in the same table you want to insert
> into, or not.
> 
> gnari
> 
> 
> 
> 
> 
> 
> 

-- 
Daryl Richter
Platform Author & Director of Technology
v: 610.361.1000 x202

((         Brandywine Asset Management          )
  ( "Expanding the Science of Global Investing"  )
  (          http://www.brandywine.com           ))





view thread (14+ messages)  latest in thread

Message-ID: <431620D5.9080809@brandywine.com>
Permalink:  ../431620D5.9080809@brandywine.com/
Also on:    postgresql.org/message-id/431620D5.9080809@brandywine.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: daryl@brandywine.com, juandelacruz@gmail.com, gnari@simnet.is
  Subject: Re: insert only if conditions are met?
  In-Reply-To: <431620D5.9080809@brandywine.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox