2016-02-12 58 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

相关问题