PostgreSQL函数如何返回数据集
生活随笔
收集整理的這篇文章主要介紹了
PostgreSQL函数如何返回数据集
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
以下主要介紹PostgreSQL函數(shù)/存儲(chǔ)過(guò)程返回?cái)?shù)據(jù)集,或者也叫結(jié)果集的示例。背景: PostgreSQL里面沒(méi)有存儲(chǔ)過(guò)程,只有函數(shù),其他數(shù)據(jù)庫(kù)里的這兩個(gè)對(duì)象在PG里都叫函數(shù)。 函數(shù)由函數(shù)頭,體和語(yǔ)言所組成,函數(shù)頭主要是函數(shù)的定義,變量的定義等,函數(shù)體主要是函數(shù)的實(shí)現(xiàn),函數(shù)的語(yǔ)言是指該函數(shù)實(shí)現(xiàn)的方式,目前內(nèi)置的有c,plpgsql,sql和internal,可以通過(guò)pg_language來(lái)查看當(dāng)前DB支持的語(yǔ)言,也可以通過(guò)擴(kuò)展來(lái)支持python等
函數(shù)返回值一般是類(lèi)型,比如return int,varchar,返回結(jié)果集時(shí)就需要setof來(lái)表示。
一、數(shù)據(jù)準(zhǔn)備 create table department(id int primary key, name text); create table employee(id int primary key, name text, salary int, departmentid int references department);insert into department values (1, 'Management'),(2, 'IT'),(3, 'BOSS');insert into employee values (1, 'kenyon', 30000, 1); insert into employee values (2, 'francs', 50000, 1); insert into employee values (3, 'digoal', 60000, 2); insert into employee values (4, 'narutu', 120000, 3); 二、例子
1.sql一例 create or replace function f_get_employee() returns setof employee as $$ select * from employee; $$ language 'sql'; 等同的另一個(gè)效果(Query) create or replace function f_get_employee_query() returns setof employee as $$ begin return query select * from employee; end; $$ language plpgsql; 查詢(xún)圖解如下 postgres=# select * from f_get_employee();id | name | salary | departmentid ----+--------+--------+--------------1 | kenyon | 30000 | 12 | francs | 50000 | 13 | digoal | 60000 | 24 | narutu | 120000 | 3 (4 rows) 查詢(xún)出來(lái)的函數(shù)還可以像普通的表一樣按條件查詢(xún) ,但如果查詢(xún)的方式不一樣,則結(jié)果也不一樣,以下查詢(xún)方式將會(huì)得到類(lèi)似數(shù)組的效果 postgres=# select f_get_employee();f_get_employee ---------------------(1,kenyon,30000,1)(2,francs,50000,1)(3,digoal,60000,2)(4,narutu,120000,3) (4 rows) 因?yàn)榉祷氐慕Y(jié)果集類(lèi)似一個(gè)表的數(shù)據(jù)集,PostgreSQL還支持對(duì)該函數(shù)執(zhí)行結(jié)果進(jìn)行條件判斷并過(guò)濾 postgres=# select * from f_get_employee() where id >3;id | name | salary | departmentid ----+--------+--------+--------------4 | narutu | 120000 | 3 (1 row) 上面的例子相對(duì)簡(jiǎn)單,如果要返回不是表結(jié)構(gòu)的數(shù)據(jù)集該怎么辦呢?看下面
2.返回指定結(jié)果集
a.用新建type來(lái)構(gòu)造返回的結(jié)果集
--新建的type在有些圖形化工具界面中可能看不到,
要查找的話(huà)可以通過(guò)select * from pg_class where relkind='c'去查,c表示composite type
參考:http://bbs.pgsqldb.com/client/post_show.php?zt_auto_bh=53950
轉(zhuǎn)載于:https://my.oschina.net/Kenyon/blog/108303
總結(jié)
以上是生活随笔為你收集整理的PostgreSQL函数如何返回数据集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: struts2配置文件的位置
- 下一篇: PLSQL developer 连接64