PostgreSQL 存储过程 通过设定条件,返回指定的数据表记录
PL/pgSQL是 PostgreSQL 数据库系统的一个可装载的过程语言。
PL/pgSQL的设计目标是创建一种可装载的过程语言,可以可用于创建函数和触发器过程, 在SQL语言中添加控制结构功能, 能够进行复杂的计算, 继承所有用户自定义类型,函数和操作符, 能够定义被服务器信任(的语言), 容易使用。
用PL/pgSQL创建的函数可以用在内置函数用的任何地方,例如,可以创建复杂的计算函数,并之后用它们来定义操作符或者在索引表达式中使用它们。
(PL/pgSQL - SQL存储过程语言:https://wiki.postgresql.org/wiki/9.1%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B9%9D%E7%AB%A0)
示例1.
1 --通过唯一ID,获取数据表记录
2 CREATE OR REPLACE FUNCTION getRealUsers()
3 RETURNS SETOF t_user
4 LANGUAGE 'plpgsql'
5 AS $BODY$
6 declare
7 mysql text;
8 idx integer;
9
10 js_id text;
11
12 user_info t_user;
13
14 user_refcursor refcursor; --多游标
15 begin
16 idx := 0;
17 mysql:='SELECT * FROM public.t_user ORDER BY js_id';
18
19 open user_refcursor for execute mysql; --打开游标
20 loop --开始循环
21 fetch user_refcursor into user_info; --将游标指定的值赋值给变量
22
23 if found then --处理逻辑
24 --raise notice 'delete_flag: %',user_info.delete_flag;
25 --raise notice 'js_id: %',user_info.js_id;
26 if idx = 0 then
27 js_id := user_info.js_id;
28 if user_info.delete_flag = 'f' then
29 return next user_info;
30 end if;
31 else
32 if js_id = user_info.js_id then
33 if user_info.delete_flag = 'f' then
34 return next user_info;
35 end if;
36 else
37 js_id := user_info.js_id;
38 if user_info.delete_flag = 'f' then
39 return next user_info;
40 end if;
41 end if;
42 end if;
43 idx := idx + 1;
44 else
45 exit;
46 end if;
47 end loop; --结束循环
48 close user_refcursor; --关闭游标
49 end;
50 $BODY$;
示例2.
1 --通过最新时间,获取数据表记录
2 CREATE OR REPLACE FUNCTION getRealUsers()
3 RETURNS SETOF t_user
4 LANGUAGE 'plpgsql'
5 AS $BODY$
6 declare
7 mysql text; --SQL
8 js_id text; --ID
9 user_info t_user; --数据表对象
10 user_refcursor refcursor; --多游标
11 begin
12 js_id := '';
13 mysql:='SELECT * FROM public.t_user ORDER BY js_id ASC, update_datetime DESC';
14
15 open user_refcursor for execute mysql; --打开游标
16 loop -- Start
17 fetch user_refcursor into user_info; --把游标的记录设定到用户情报
18
19 if found then
20 --把最新的ID记录留下
21 if js_id != user_info.js_id then
22 js_id := user_info.js_id;
23 return next user_info;
24 end if;
25 else
26 exit;
27 end if;
28 end loop; -- End
29 close user_refcursor; --关闭游标
30
31 end;
32 $BODY$;
调用:
1 -- select * from t_user
2 select * from getRealUsers() --跟数据表一样使用
End
PostgreSQL 存储过程 通过设定条件,返回指定的数据表记录的更多相关文章
- result默认返回action中的所有数据,要想返回指定的数据怎么做呢
result默认返回action中的所有数据,要想返回指定的数据怎么做呢?
- Oracle生成查询包括对应于所有数据表记录语句中指定的字段名
应用:已知的字段名,表中的所有数据的查询数据库中包含的所有数据表的字段名 操作方法:指定字段名,用户数据库表,它可以执行以下查询 --Oracle生成查询包括对应于所有数据表记录语句中指定的字段名 d ...
- Oracle生成查询包含指定字段名对应的所有数据表记录语句
应用场合:已知字段名字,查询数据库中所有数据表中包含该字段名的所有数据表 操作办法:指定字段名,数据库表用户,执行下面查询语句即可 --Oracle生成查询包含指定字段名对应的所有数据表记录语句 de ...
- Mongodb关于查询返回指定字段的方法记录
//通常指定字段由前端传入后台,例如params 前端以逗号分隔 //后端获取字段后操作如下: Query query = new Query(); if (params != null) { Str ...
- Postgresql导出指定的数据表
两对双引号"\"\""是用于解决:pg_dump: no matching tables were found 问题. pg_dump -h localhost ...
- 利用MySQL原数据信息批量转换指定库数据表生成Hive建表语句
1.写出文件工具类 package ccc.utile; import java.io.*; /** * @author ccc * @version 1.0.0 * @ClassName Write ...
- SqlProfilter监控指定数据库数据表——监控linq组合查询生成的sql
1.例子 实际测试环境中往往很多测试都在调用数据库,那么如何使用SqlProfilter监控筛选到自己想要监看的数据库对应的表有关linq生成的sql时候就需要做如下设置了 ........... u ...
- session 保存在指定的数据表,cookie设置
首先建立数据表,可在ThinkPHP/Extend/Driver/Session/SessionDb.class.php中copy代码 在配置文件中配置: 'SESSION_TYPE' => ' ...
- linq 根据指定条件返回集合中不重复的元素
原理:先查询出数据,根据指定值分组,然后取第一条映射 1.第一种方法 string sql = string.Format("select*from PoliceLogistcs); db. ...
- Mybatis调用PostgreSQL存储过程实现数组入参传递
注:本文来源于 < Mybatis调用PostgreSQL存储过程实现数组入参传递 > 前言 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于Pos ...
随机推荐
- jmeter使用Java请求二
继承 AbstractJavaSamplerClient类来实现jar编辑 来写jmeter测试脚本 将如下两个包引入Java项目: ApacheJMeter_core.jar ApacheJMete ...
- wpf DataGrid相关总结
1.去掉外边蓝框,设置BorderThickness="0"
- WCF的实现(方式二)
参考他人实现文件传输 [WCF]利用WCF实现上传下载文件服务 服务端: 1.首先新建一个名为FileService的WCF服务库项目,如下图: 2.将Service,IService重命名为File ...
- docker的安装和命令
一. 认识Docker 我们写的代码会接触好几个环境:开发环境,测试环境以及生产环境 开发环境:程序员开发代码的环境 测试环境:开发完的代码部署到测试环境 给测试人员进行测试 生产环境:测试完成后有运 ...
- 蓝桥杯训练赛二-问题 B
字符串的输入输出处理. 输入 第一行是一个正整数N,最大为100.之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000. 输出 先将输入中的前N行字符串(可能含有空格)原样 ...
- Abp框架使用Swgger注释加分组
1.在ConfigureSwaggerServices中配置SwaggerDoc,并options.DocInclusionPredicate((doc, desc) => { return d ...
- P标签内容过长以省略号代替
p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
- VS2017创建Linux项目实现远程GDB调试
vs2017新增linux for C++的模块,尝试安装了一下环境. 首先,安装VS2017,安装时注意选择以下模块: 安装完成后,需要配置Linux服务端的部分,我的配置过程如下: 第一步,安装V ...
- HDLbits——Mt2015 lfsr
1.描述电路图里面的一个子模块 Assume that you want to implement hierarchical Verilog code for this circuit, using ...
- net6 - System.ComponentModel.DataAnnotations Attribute
using System; using System.Web.DynamicData; using System.ComponentModel.DataAnnotations; [MetadataTy ...