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 ...
随机推荐
- Pycharm报错:Error running ‘‘: Cannot run program “\python.exe“ (in directory ““)系统找不到指定文件夹?已解决!
问题报错 报错原因:我修改的工程的名称/或者移动了工程位置,运行导致找不到之前的运行路径 解决办法1.在该项目文件夹下找到一个叫.idea的文件夹.(若没有,选择显示隐藏项目,可能被隐藏了)PyCha ...
- Jmeter学习:字符串,加密相关函数,groovy脚本函数
一.__digest 功能介绍: 将输入进行 MD5 加密 ${__MD5(参数 1,参数 2)} 参数 1:加密算法,必选,MD2 MD5 SHA-1 SHA-224 SHA-256 SHA-384 ...
- win10 打开剪切板失败 拒绝访问 已解决!!
问题 剪切板使用混乱,导致本地无法复制粘贴 解决办法 terminal运行echo off | clip
- Word运行 没有注册类
启动Word时出现Microsoft Visual Baisc窗口报错,提示"运行时错误 没有注册类""运行时错误 424 要求对象" 删除路径为 C:\用户\ ...
- java轻量级锁、重量级锁、可重入锁、偏向锁、自旋锁的概念
1.重量级锁 作为互斥同步的方式,是最基础的锁,其他的锁都是为了减少开销做的优化,重量级锁借助了monitor 对象,monitor对象中有三个区域,分别是entity site. owner和wai ...
- Raize
Raize.v5和Raize.v6 本人在windows10下装有delphi7和delphi2010,安装好Raize.v6后,两个版本delphi的控件页都找不到Raize控件,即使想编译相应的D ...
- springboot启动日志:Multiple Spring Data modules found, entering strict repository configuration mode
问题描述 最近启动springboot项目的时候,发现有一条日志:Multiple Spring Data modules found, entering strict repository conf ...
- py10函数之嵌套-名称空间作用域
# 函数是第一类对象:函数名指向的值可以被当中参数传递 # 1.函数名可以被传递# name = 'jason'# x = name# print(x)# print(id(x))# def func ...
- tiktok运营工具
1.自信点!这就是TikTok最全运营工具合集! - 知乎 (zhihu.com) 2.骄傲的和大家说!这就是TikTok最全运营工具合集! - 知乎 (zhihu.com) 3.如何批量去水印下载抖 ...
- 我和Java这些年的故事(六)
从2006年开始,我就在建设自己的网站,从2008年到2011年,我托管了四年自己的服务器,那时阿里云还没有兴起,只能自己买服务器,放到托管商机房里去,他们给你一个IP.机器全部是自己运维. IBM内 ...