postgresql 存储过程返回结果集

最近因为工作需要写了个登录校验函数,话不多说,贴代码,因为只是一个简单的介绍用法,所以核心判断我就全部去掉了。

//最先要求是只返回一个用户id,于是简单的returns integer就可以完成。

CREATE OR REPLACE FUNCTION validate_user()
RETURNS integer AS
$BODY$
DECLARE i integer;
begin

return i;

end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

-- 后面更改了需求,要求返回表中一行的值,所以我就使用了游标,不过后获取游标的值太过麻烦,所以又修改了一次。

CREATE OR REPLACE FUNCTION validate_user()
RETURNS refcursor AS
$BODY$
declare user_list refcursor;
begin
open user_list for select * from tb_user where email = usernameTe and state=1;
return user_list;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

//下面是标准的pg/sql的写法

CREATE OR REPLACE FUNCTION validate_user()
RETURNS setof tb_user AS
$BODY$
declare user_list tb_user;
begin
for user_list in select * from tb_user where email = usernameTe and userpwd= passwordTe and state=1 loop
return next user_list;
end loop;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

//还有一种写法是直接select,这里就不贴出来了,判断成功之后直接使用select语句就行,无需返回值。

//后面需要增加一个参数返回判断情况,所以我这里使用了out输出,也是比较灵活。输出参数前缀加T是因为我所使用的psql版本变量不可以冲突。

--output参数使用

CREATE OR REPLACE FUNCTION validate_user(usernamete text, passwordte text,out Tuserid int,out Tpassword text,out Tusername text,out Tcompid int,out Trole int,out Terrcode int)
AS
$BODY$
begin
select userid,userpwd,username,compid,role,0 from tb_user where email = usernamete and state=1 into $3,$4,$5,$6,$7,$8;
return;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100; 
时间: 2024-08-05 13:46:35

postgresql 存储过程返回结果集的相关文章

oracle 存储过程返回结果集

好久没上来了, 难道今天工作时间稍有空闲, 研究了一下oracle存储过程返回结果集. 配合oracle临时表, 使用存储过程来返回结果集的数据读取方式可以解决海量数据表与其他表的连接问题. 在存储过程中先根据过滤条件从海量数据表中选出符合条件的记录并存放到临时中, 可以通过一个视图将临时表与其他相关表连接起来, 从而避免海量数据造成的连接效率问题. 本文只讨论使用存储过程返回结果集. 具体实现如下: -- 启用服务器输出---------------------set serveroutput

postgresql 函数返回结果集(zz)

pgsql function 系列之一:返回结果集--------------------------------------------------------------------------------我们在编写postgresql数据库的函数(或称为存储过程)时,时常会遇到需要返回一个结果集的情况,如何返回一个结果集,返回一个结果集有多少种方式,以及如何选择一个合适的方式返回结果集,这是一个需要仔细考虑的问题.本文仅简单的罗列出各种返回结果集的方式并试图分析他们的特点,而采用何种方式则

mybatis调用mysql存储过程返回结果集

存储过程中经常需要返回结果集. Mysql 中直接用 select 即可返回结果集.而 oracle 则需要使用游标来返回结果集.这一点 Mysql 相对比较方便,如下代码即可实现输出结果集: 存储过程定义: DELIMITER $$ DROP procedure IF EXISTS pro_sql_data1 $$ CREATE procedure pro_sql_data1(in sear_name varchar(2000)) BEGIN if sear_name is not null

PostgreSQL存储过程返回数据集实例

这里用一个实例来演示PostgreSQL存储过程如何返回数据集. 1 首先准备数据表 <pre name="code" class="sql">//member_category create table member_category(id serial, name text, discount_rate real, base_integral integer); alter table member_category add primary key(

oracle存储过程返回结果集

http://www.2cto.com/database/201204/127180.html oracle实现存储过程返回查询结果集合的方法 --实现存储过程返回查询结果集合的方法 ,以下代码来自网络整理 http://topic.csdn.net/u/20090721/12/ba403739-3212-4016-83ec-2a7062f21081.html Java代码 --第一种方法 create or replace Package SYSBasic as  www.2cto.com t

C#中使用Oracle存储过程返回结果集

问题: 在MSSQLServer中定义的存储过程可以直接返回一个数据集,如: create procedure sp_getAllEmployees as SELECT * FROM [NORTHWND].[dbo].[Employees] 在Oracle数据库中这样定义是错误的,怎么解决? 办法: Oracle中可以使用游标(Cursor)对数据集进行操作,但在存储过程输出参数中直接使用Cursor错误,此时的Cursor应该是一个定义游标的关键字并非类型,所以先要定义一个包,在包中声明全局的

python 调用mysql存储过程返回结果集

存储过程: delimiter | create procedure get_product_info(in imid int(10),int iuser varchar(20)) begin select * from tb_test where mid = imid and user = iuser; end; | delimiter ; python调用: import mysql.connector cnx = mysql.connector.connect( user='test',p

怎样让Oracle的存储过程返回结果集

Oracle存储过程: CREATE OR REPLACE PROCEDURE getcity ( citycode IN VARCHAR2, ref_cursor OUT sys_refcursor /* 这个sys_refcursor类型在SYS.STANDARD包中 */ ) AS BEGIN OPEN ref_cursor FOR SELECT * FROM tb_city_code WHERE city_code = citycode; END; / Java调用代码: try { D

Oracle 存储过程 返回结果集

CREATE OR REPLACE PACKAGE PKG_CUST_RISK IS -- AUTHOR : ADMINISTRATOR -- CREATED : 2014/4/22 10:00:27 -- PURPOSE : 客户风险 VI_ERRORCODE M_LOG.ERRORCODE%TYPE DEFAULT 0; --数值型 异常代码 VS_ERRORTEXT M_LOG.ERRORTEXT%TYPE DEFAULT NULL; --字符型 异常描述 VS_OWNER M_LOG.O