http://www.postgresonline.com/journal/archives/201-Using-RETURNS-TABLE-vs.-OUT-parameters.html

http://www.postgresql.org/docs/9.4/interactive/index.html

--http://www.postgresonline.com/journal/archives/201-Using-RETURNS-TABLE-vs.-OUT-parameters.html
--ver:9.3 Geovin Du 涂聚文
--returning a single record using SQL function
CREATE OR REPLACE FUNCTION fn_sqltestout(param_subject text, pos integer)
RETURNS TABLE(subject_scramble text, subject_char text)
AS
$$
SELECT substring($1, 1,CAST(random()*length($1) As integer)) ,
substring($1, 1,1) As subject_char;
$$
LANGUAGE 'sql' VOLATILE;
-- example use
SELECT (fn_sqltestout('This is a test subject',1)).subject_scramble;
SELECT subject_scramble, subject_char FROM fn_sqltestout('This is a test subject',5); --Same function but written in plpgsql
--PLPGSQL example -- return one record
CREATE OR REPLACE FUNCTION fn_plpgsqltestout(param_subject varchar)
RETURNS TABLE(subject_scramble varchar, subject_char varchar)
AS
$$
BEGIN
subject_scramble := substring($1, 1,CAST(random()*length($1) As varchar));
subject_char := substring($1, 1,1);
RETURN NEXT;
END;
$$
LANGUAGE 'plpgsql' VOLATILE; -- example use
SELECT (fn_plpgsqltestout('This is a test subject')).subject_scramble;
SELECT subject_scramble, subject_char FROM fn_plpgsqltestout('This is a test subject'); -- test data to use --
CREATE TABLE testtable(id integer PRIMARY KEY, test text);
INSERT INTO testtable(id,test)
VALUES (1, 'Potato'), (2, 'Potato'), (3, 'Cheese'), (4, 'Cheese Dog'); --SQL function returning multiple records
CREATE OR REPLACE FUNCTION fn_sqltestmulti(param_subject varchar)
RETURNS TABLE(test_id integer, test_stuff text)
AS
$$
SELECT id, test
FROM testtable WHERE test LIKE $1;
$$
LANGUAGE 'sql' VOLATILE; -- example use
SELECT (fn_sqltestmulti('Cheese%')).test_stuff;
SELECT test_stuff FROM fn_sqltestmulti('Cheese%'); -- plpgsql function returning multiple records
-- note RETURN QUERY was introduced in 8.3
-- variant 1
CREATE OR REPLACE FUNCTION fn_plpgsqltestmulti(param_subject varchar)
RETURNS TABLE(test_id integer, test_stuff text)
AS
$$
BEGIN
RETURN QUERY SELECT id, test
FROM testtable WHERE test LIKE param_subject;
END;
$$
LANGUAGE 'plpgsql' VOLATILE; --测试
select * from fn_plpgsqltestmulti('Cheese%'); -- variant 2 use this if you need to do something additional
-- or conditionally return values or more dynamic stuff
-- RETURN QUERY is generally more succinct and faster
CREATE OR REPLACE FUNCTION fn_plpgsqltestmulti(param_subject varchar)
RETURNS TABLE(test_id integer, test_stuff text)
AS
$$
DECLARE
var_r record;
BEGIN
FOR var_r IN(SELECT id, test
FROM testtable WHERE test LIKE param_subject) LOOP
test_id := var_r.id ; test_stuff := var_r.test;
RETURN NEXT;
END LOOP;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;
-- example use
-- This is legal in PostgreSQL 8.4+
-- (prior versions plpgsql could not be called this way)
SELECT (fn_plpgsqltestmulti('Cheese%')).test_stuff; SELECT * FROM fn_plpgsqltestmulti('Cheese%');

  

--函数  涂聚文 Geovin Du
CREATE FUNCTION check_password(uname TEXT, pass TEXT)
RETURNS BOOLEAN AS $$
DECLARE passed BOOLEAN;
BEGIN
SELECT (pwd = $2) INTO passed
FROM pwds
WHERE username = $1; RETURN passed;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER
-- Set a secure search_path: trusted schema(s), then 'pg_temp'.
SET search_path = admin, pg_temp; ---http://www.postgresql.org/docs/current/static/sql-createfunction.html
CREATE OR REPLACE function f_GetDepartmentName
(
did integer
)
returns varchar as $$
declare str varchar;
begin
select DepartmentName INTO str from DepartmentList where DepartmentID=did;
return str;
end;
$$language plpgsql; --测试
select f_GetDepartmentName(1) as name; --( (select DepartmentName from DepartmentList where DepartmentID = in_id) union (select name from test_result2 where id = in_id) )
CREATE OR REPLACE FUNCTION func_DepartmentMore ( in_id integer)
RETURNS SETOF varchar as
$$
DECLARE
v_name varchar;
BEGIN
for v_name in (select DepartmentName from DepartmentList where DepartmentID = in_id)loop
RETURN NEXT v_name;
end loop;
return;
END;
$$
LANGUAGE PLPGSQL;
---
select func_DepartmentMore(1); --- CREATE OR REPLACE FUNCTION func_DepartmentName_muti (in_id integer)
RETURNS SETOF RECORD as
$$
DECLARE
v_rec RECORD;
BEGIN for v_rec in (select DepartmentID,DepartmentName from DepartmentList where DepartmentID = in_id)loop
RETURN NEXT v_rec;
end loop;
return;
END;
$$
LANGUAGE PLPGSQL; --测试
select * from func_DepartmentName_muti(1) t(DepartmentID integer,DepartmentName varchar); CREATE OR REPLACE FUNCTION func_DepartmentName_query ( in_id integer)
RETURNS SETOF RECORD as
$$
DECLARE
v_rec RECORD;
BEGIN return query(select DepartmentID,DepartmentName from DepartmentList where DepartmentID = in_id);
return;
END;
$$
LANGUAGE PLPGSQL; --测试
select * from func_DepartmentName_query(1) t(DepartmentID integer,DepartmentName varchar); ---http://www.postgresonline.com/journal/archives/129-Use-of-OUT-and-INOUT-Parameters.html
CREATE OR REPLACE FUNCTION func_DepartmentName_out( in_id integer,out o_id integer,out o_name varchar)
RETURNS SETOF RECORD as
$$
DECLARE
v_rec RECORD;
BEGIN
for v_rec in ( select DepartmentID,DepartmentName from DepartmentList where DepartmentID = in_id)loop
o_id := v_rec.DepartmentID;
o_name := v_rec.DepartmentName;
RETURN NEXT ;
end loop;
return;
END;
$$
LANGUAGE PLPGSQL; --测试 select DepartmentID,DepartmentName from DepartmentList select * from func_DepartmentName_out(1); select * from func_DepartmentName_out(2); ---
CREATE OR REPLACE FUNCTION func_table(in_id int) RETURNS TABLE(f1 int, f2 varchar)
AS
$$
begin
SELECT f1=DepartmentID, f2=DepartmentName from DepartmentList where DepartmentID =in_id;
end;
$$
LANGUAGE SQL; SELECT * FROM dup(42); CREATE OR REPLACE FUNCTION fn_plpgsqltestout(param_subject text,
OUT subject_scramble text, OUT subject_char text)
AS
$$
BEGIN
subject_scramble := substring($1, 1,CAST(random()*length($1) As integer));
subject_char := substring($1, 1,1);
END;
$$
LANGUAGE 'plpgsql' VOLATILE; --测试 select fn_plpgsqltestout('geovindu'); CREATE OR REPLACE FUNCTION fn_sqltestmulti(param_subject varchar,
OUT test_id integer,
OUT test_stuff text)
RETURNS SETOF record
AS
$$
SELECT DepartmentID,DepartmentName
FROM DepartmentList where DepartmentName LIKE $1;
$$
LANGUAGE 'sql' VOLATILE; --测试
SELECT * FROM fn_sqltestmulti('%d%');
--OUT takes precendence which is why we prefix the table columns
CREATE OR REPLACE FUNCTION fn_plpgsqltestmulti(
param_subject varchar,
OUT test_id integer,
OUT test_stuff varchar)
RETURNS SETOF record
AS
$$
BEGIN
RETURN QUERY SELECT t.DepartmentID , t.DepartmentName
FROM DepartmentList As t
WHERE t.DepartmentName LIKE param_subject;
END;
$$
LANGUAGE 'plpgsql' VOLATILE; SELECT * FROM fn_plpgsqltestmulti('%d%',1, 'd');

  

sql:PostgreSQL9.3 Using RETURNS TABLE vs. OUT parameters的更多相关文章

  1. PL/pgSQL RETURNS TABLE 例子

    实验如下: RETURNS TABLE 中的变量名和SQL文中的变量名同名时,执行时会出错: pgsql=# create table sales(itemno integer,quantity in ...

  2. SQL Azure (18) 使用External Table实现垮库查询

    <Windows Azure Platform 系列文章目录> 问题 1.我们在进行SQL Server开发的时候,经常会使用垮库查询.但是在默认情况下,使用Azure SQL Datab ...

  3. 转载:SQL Server 2008-建立分区表(Table Partition) 转载

    数据库结构和索引的是否合理在很大程度上影响了数据库的性能,但是随着数据库信息负载的增大,对数据库的性能也发生了很大的影响.可能我们的数据库在一开始有着很高的性能,但是随着数据存储量的急速增长—例如订单 ...

  4. 传入sql数组字符串,输出table

    CREATE function [dbo].[split](@aString varchar(),@pattern varchar()) returns @temp table([Sid] [, ) ...

  5. linux之SQL语句简明教程---CREATE TABLE

    表格是数据库中储存资料的基本架构.在绝大部份的情况下,数据库厂商不可能知道您需要如何储存您的资料,所以通常您会需要自己在数据库中建立表格.虽然许多数据库工具可以让您在不需用到 SQL 的情况下建立表格 ...

  6. oracle学习之路(四) ---------PL/SQL 表,二维数组(TABLE)

    LOB类型 ORACLE提供了LOB (Large OBject)类型.用于存储大的数据对象的类型.ORACLE眼下主要支持BFILE, BLOB, CLOB 及 NCLOB 类型. NCLOB 存储 ...

  7. sql 将字符串转化为table

    /* *参数说明: 第一个参数为要转化的字符串,第二个参数为字符串中间的分隔符 */ ),)) )) as begin ) set @SourceSql=@SourceSql+@StrSeprate ...

  8. sql sever 授予用户create table权限

    sql server2008的用户权限管理及其细致.此处我也不知道是表扬还是批评.所以经常会遇到各种“对不起您没有**权限”的问题. 本次遇到的问题机器常见.在尝试修改数据库结构时提示"没有 ...

  9. SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

随机推荐

  1. mxonline实战7,模板继承和模板标签

        对应github地址:https://github.com/pshyms/django/tree/master/mxonline/7_day     一. 定制不同页面中样式相同,内容不同的模 ...

  2. instanceof,isinstance,isAssignableFrom,asSubclass的区别

    1,isAssignableFrom():是字节码对象的方法 是用来判断一个类的字节码对象和另一个类的字节码对象是否相同或是子类或接口. assignable英 [ə,sainəbl]美 [ə,sai ...

  3. Java中常用到的文件操作那些事(一)——替换doc文档模板,生成真实合同案例

    工作中,我们时常会遇到一些操作文件的操作,比如在线生成合同模板,上传/下载/解析Excel,doc文档转为pdf等操作.本文就已工作中遇到的在线生成合同为例,简要地介绍一种文档替换写法. 本文目的:给 ...

  4. 代码 | 自适应大邻域搜索系列之(4) - Solution定义和管理的代码实现解析

    前言 上一篇讲解了destroy和repair方法的具体实现代码,好多读者都在喊酸爽和得劲儿--今天这篇就讲点简单的,关于solution的定义和管理的代码实现,让大家回回神吧--哈哈. 01 总体概 ...

  5. SVN版本库备份和恢复

    1.版本库备份 1.1.svnadmin dump方式备份 此方法借助的是Subversion官网推荐的svnadmin dump备份方式,它的优点是比较灵活,既可以进行全量备份又可以进行增量备份,并 ...

  6. 牛客OI周赛8-提高组A-用水填坑

    牛客OI周赛8-提高组A-用水填坑 题目 链接: https://ac.nowcoder.com/acm/contest/403/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制: ...

  7. Mac休眠之后唤醒时无法使用鼠标

    Mac休眠之后唤醒时,无法使用鼠标键盘,无法输入密码登录,只能重启. 尝试升级系统,问题依旧,最后在Google的帮助下,问题解决. 解决办法:系统偏好设置->节能->取消硬盘休眠 参考: ...

  8. 完全国人自主研发原创的智能软件路由器BDS即将发布,附带企业服务总线ESB功能

    完全国人自主研发原创的智能软件路由器即将发布: 完全国人自主研发原创的智能软件路由器BDS即将发布,附带企业服务总线ESB功能 智能软件路由器 BDS 简要介绍 http://kan.weibo.co ...

  9. 完美解决linux系统sublime不能输入中文

    1.下载git项目:sublime-text-imfix,主要是要用到里面的两个文件   subl和libsublime-imfix.so git项目路径:https://github.com/lyf ...

  10. web服务器/应用服务器

    1.概念 Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL.与客户端的网络浏览器配合.因为Web服务器主要支持的协议就是HTTP,所以通常情况下HTT ...