2016-02-12 44 views
0

說我有一個select語句。使用參數調用Postgres存儲過程並插入給定選擇的值

SELECT sensorname, starttime from sensors where id = ?; 

它返回例如:

Value1 | 123456789 
Value1 | 987465465 

(開始時間是一個時間戳)

現在,我想創建我的Postgres內的StoredProcedure。

someProcedure(argumentId){ 
    Result r = SELECT sensorname, starttime from sensors where id = ?; 

} 

然後它應該遍歷resultSet,取得結果並將它們插入到另一個表中,最後從原始表中刪除舊的結果。

這是否可能與storedProcedure?

編輯:我需要一個存儲過程爲此。

類似:

CREATE OR REPLACE FUNCTIONrollupMinutes(id bigint) RETURNS void AS $$ 

BEGIN 
    var qry_rsult = SELECT sensorname, starttime from sensors where id = id; 
    insert into rollup(qry_result) 
END; 
$$ LANGUAGE plpgsql; 

回答

1

你可以做,使用CTE像下面(只有當你想避免功能

WITH cte (id) 
AS (
    INSERT INTO another_table (sensorname,starttime) 
    SELECT sensorname 
      ,starttime 
    FROM sensors WHERE id = id 
    returning id; 
    ) 
DELETE 
FROM 
sensors 
WHERE id IN (SELECT *FROM cte); 

OR

通過創建它可以像一個功能

create or replace function fn(id int) returns void as 
$$ 
insert into another_table(sensorname,starttime) 
SELECT sensorname, starttime from sensors where id =id; 
delete from sensors where id =id; 
$$ 
language sql 

用法:

select fn(12) 
+0

我沒有得到這個CTE如何與功能 – Christian

+0

CTE這裏沒有與它的不同的方法,我已經添加CTE方法只爲您的信息的功能一起工作發揮 –

+0

好的。好,謝謝。我真正想要的是從表中選擇一個子集並將其插入另一個表中。然後刪除原始數據。 – Christian

相關問題