1. 程式人生 > >Postgresql - plpgsql - 從Function中查詢並返回多行結果

Postgresql - plpgsql - 從Function中查詢並返回多行結果

通過plpgsql查詢表,並返回多行的結果。

 

建立實驗表插入資料參考之前文章

 

返回查詢結果

mytest=# create or replace function test_0830_5() returns setof test

mytest-# as $$

mytest$# DECLARE

mytest$# r test%rowtype; -- 將

mytest$# BEGIN

mytest$# FOR r IN

mytest$# SELECT * FROM test WHERE id > 0

mytest$# LOOP

mytest$# RETURN NEXT r;

mytest$# END LOOP;

mytest$# RETURN;

mytest$# END

mytest$# $$ language plpgsql;

CREATE FUNCTION

 

mytest=# select test_0830_5(1);

test_0830_5

------------------------------------------

(2,abcabc,"2018-08-30 09:26:14.392187")

......

(11,abcabc,"2018-08-30 09:26:14.392187")

(10 rows)

 

mytest=# select * from test_0830_5();

id | col1 | col2

----+--------+----------------------------

2 | abcabc | 2018-08-30 09:26:14.392187

......

11 | abcabc | 2018-08-30 09:26:14.392187

(10 rows)

 

 

返回某列

mytest=# CREATE OR REPLACE FUNCTION test_0830_6(date) RETURNS SETOF integer AS $$

mytest$# BEGIN

mytest$# RETURN QUERY SELECT id

mytest$# FROM test

mytest$# WHERE col2 >= $1

mytest$# AND col2 < ($1 + 1);

mytest$# IF NOT FOUND THEN

mytest$# RAISE EXCEPTION 'No id at %.', $1;

mytest$# END IF;

mytest$# RETURN;

mytest$# END

mytest$# $$

mytest-# LANGUAGE plpgsql;

CREATE FUNCTION

mytest=# select test_0830_6('2018-08-30');

test_0830_6

-------------

2

......

11

(10 rows)