2017-12-12 11 views
0
table: 
name date  object 
james 25/04/2017 bycicle 

insert into statisticstable 
select * from table; 

名前と日付が統計テーブルにない場合にのみ、テーブル統計を更新する関数を記述したいと思います。 統計表に名前と日付がある場合は、表統計を更新しません。 統計表に名前と日付がない場合は、表統計を更新します。このような関数がテーブルを更新する場合は?

何か:

CREATE FUNCTION update_table() 
DECLARE 
name = &name 
date = &date 

if &name and &date are in statisticstable 
then null;  
if &name and &date aren't in statisticstable 
insert into statisticstable 
select * from table; 

はすみませんが、私は機能の専門家ではないです。

+0

を探検 - https://stackoverflow.com/questions/1009584/how-to-emulate-insert-ignore-and-on-duplicate-key-update-sql-merge -with-po –

答えて

1

このリフレこの

CREATE OR REPLACE FUNCTION update_table(name character varying, dte character varying) 
RETURNS void AS 
    $BODY$ 
    BEGIN 
    EXECUTE 'INSERT INTO statisticstable (name , date) 
     (SELECT '''||name||''' , '''||dte||''' 
      WHERE NOT EXISTS(
      SELECT 1 FROM statisticstable 
      WHERE name = '''||name||''' 
      AND date= '''||dte||''') 
     )'; 
    END; 
    $BODY$ 
LANGUAGE plpgsql