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的核心原理 (一)

    搜索引擎 搜索引擎的分类 全文搜索:谷歌.百度.必应:这种搜索过程到底搜索啥,不知道,有可能是个帖子,也有可能是个门户网站 垂直搜索:视频网站.各大电商:这种搜索内容是固定的,比如在懂车帝,你搜索的一 ...

  2. springcloud(四) - 服务治理Hystrix

    功能介绍 调用下游服务,下游因为超时.异常等原因报错的时候.hystrix保证不会出现整体异常,避免雪崩.主要策略是服务的熔断.降级   应用场景 降级:异常.超时.熔断等情况发生后,不让客户端等待返 ...

  3. 字符串类型如何格式化保留小数点后两位【ToString("0.00")】

    废话都不想写了,直接上图 遇到将decimal字段或者double字段转换成字符串string类型字段时想直接保留小数点后面两位的时候可以有个比较简易的格式化写法 也就是 str.ToString(& ...

  4. 【git】3.5 git分支-远程分支

    资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF ...

  5. c++初始化和赋值的区别

    静态对象的声明及初始化不是赋值 声明(并缺省初始化)后再赋值 #include <iostream> #include <string> void fun(std::strin ...

  6. Redis 突然变慢了如何排查并解决?

    业务场景 某购物平台打算举行"双十一"大型购物狂欢活动,到了半夜12点用户数量暴增,出现了一个技术故障,用户发现自己无法下单!!! 技术组立即组织人手进行故障排查,结论是 Redi ...

  7. vuex状态管理器

    vuex核心概念 // vuex中一共有五个状态 State Getter Mutation Action Module import Vue from 'vue' import Vuex from ...

  8. php 动态实例化某个类

    $name = 'test'; $controller = 'test'; $a = '\\addons\\'.$name.'\\model\\'.$controller; $this->mod ...

  9. Job for nfs-server.service failed because the control process exited with error code. See "systemctl status nfs-server.service" and "journalctl -xe" for details.

    问题: 解决:

  10. nginx的nginx.conf配置文件如何修改代理的路由

    方法 location /api/ { set $request_uri_new $request_uri; if ($request_uri ~ "^/api/(.*)$") { ...