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 存储过程 通过设定条件,返回指定的数据表记录的更多相关文章

  1. result默认返回action中的所有数据,要想返回指定的数据怎么做呢

    result默认返回action中的所有数据,要想返回指定的数据怎么做呢?

  2. Oracle生成查询包括对应于所有数据表记录语句中指定的字段名

    应用:已知的字段名,表中的所有数据的查询数据库中包含的所有数据表的字段名 操作方法:指定字段名,用户数据库表,它可以执行以下查询 --Oracle生成查询包括对应于所有数据表记录语句中指定的字段名 d ...

  3. Oracle生成查询包含指定字段名对应的所有数据表记录语句

    应用场合:已知字段名字,查询数据库中所有数据表中包含该字段名的所有数据表 操作办法:指定字段名,数据库表用户,执行下面查询语句即可 --Oracle生成查询包含指定字段名对应的所有数据表记录语句 de ...

  4. Mongodb关于查询返回指定字段的方法记录

    //通常指定字段由前端传入后台,例如params 前端以逗号分隔 //后端获取字段后操作如下: Query query = new Query(); if (params != null) { Str ...

  5. Postgresql导出指定的数据表

    两对双引号"\"\""是用于解决:pg_dump: no matching tables were found 问题. pg_dump -h localhost ...

  6. 利用MySQL原数据信息批量转换指定库数据表生成Hive建表语句

    1.写出文件工具类 package ccc.utile; import java.io.*; /** * @author ccc * @version 1.0.0 * @ClassName Write ...

  7. SqlProfilter监控指定数据库数据表——监控linq组合查询生成的sql

    1.例子 实际测试环境中往往很多测试都在调用数据库,那么如何使用SqlProfilter监控筛选到自己想要监看的数据库对应的表有关linq生成的sql时候就需要做如下设置了 ........... u ...

  8. session 保存在指定的数据表,cookie设置

    首先建立数据表,可在ThinkPHP/Extend/Driver/Session/SessionDb.class.php中copy代码 在配置文件中配置: 'SESSION_TYPE' => ' ...

  9. linq 根据指定条件返回集合中不重复的元素

    原理:先查询出数据,根据指定值分组,然后取第一条映射 1.第一种方法 string sql = string.Format("select*from PoliceLogistcs); db. ...

  10. Mybatis调用PostgreSQL存储过程实现数组入参传递

    注:本文来源于 < Mybatis调用PostgreSQL存储过程实现数组入参传递  > 前言 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于Pos ...

随机推荐

  1. es实现规格动态域生成

    1.就是把sepc的可以提取出来作为一个域(sepc是一个规格参数) 封装搜索条件(跟jdbc流程一样) @requestparam( required = false) 的作用?   不传值后台也不 ...

  2. 3月1日至3月2日——数据结构与算法分析阅读笔记,线性表,AI。

    (开头是一些废话啊,最近感觉学习状态不太好,上高数的时候左耳听进去右耳就出来了,有点跟不上,可能是没吃饭的原因,也可能是最近强度有点大了,下午上完课就给自己休息了一下,结果刷手机全是关于AI的内容,谢 ...

  3. Kubernetes二进制安装

    目录: 操作系统初始化配置 部署docker引擎 部署etcd集群 准备签发证书环境 部署Master组件 部署Worker Node组件 部署CNI网络组件 部署flannel 部署Calico 部 ...

  4. 2.mysql存储过程、存储函数与触发器

    -- 创建一个存储过程DELIMITER $CREATE PROCEDURE 存储过程名称(返回类型 参数名1 参数类型1, ....) [ ...... ]BEGIN -- 具体组成存储过程的SQL ...

  5. 安装oracle出现环境不满足最低要求

    安装win64_11gR2_database_1of2的时候出现这个,百度了下解决方法 在oracle安装包找到stage文件夹 然后找到cvu 然后在cvu里面找到cvu_prereq,用记事本打开 ...

  6. PyTables学习 (数据保存形式,对象树结构)

    参考自http://www.pytables.org/usersguide/introduction.html PyTables的主要目的是提供一个好的操作HDF5文件的方法. HDF文件是分层数据格 ...

  7. 关于sql时间方面的处理

    查询大于时间两小时(例:订单设置两小时后过期 $res = Order::where(['status'=>0,'sid'=>1])->whereRaw("created_ ...

  8. COM 对象的利用与挖掘4

    作者:Joey@天玄安全实验室 前言 本文在FireEye的研究Hunting COM Objects[1]的基础上,讲述COM对象在IE漏洞.shellcode和Office宏中的利用方式以及如何挖 ...

  9. APP对接支付宝付款

    1.支付宝开发平台:https://openhome.alipay.com/ 2.进去沙箱,配置支付密钥 记录下appid,然后设置秘钥;  3.后端代码,配置类 pom文件sdk添加依赖 <! ...

  10. Flink Concept Timely Stream Processing -Flink概念及时流处理

    目录 介绍 时间概念:事件时间和处理时间 事件时间和水印 并行流中的水印 延迟 窗口 翻译来源- Concept Timely Stream Processing 介绍 及时的流处理是有状态流处理的扩 ...