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. Git相关、Gitee多人协同开发

    Git相关 1.介绍 ​ 是一个具有版本控制的软件,控制开发的项目代码,具有集群化.多分支的功能 2.对于程序员的作用 协同开发 解决代码合并过程中冲突 代码版本管理 3.git 与 svn 比较 ​ ...

  2. Jmeter学习:Jmeter函数助手

    转载地址:https://www.cnblogs.com/imyalost/p/6802173.html

  3. vue3 门户网站搭建8-字体

    浏览器默认的可选字体比较少,如果没有合适的则需要额外下载并引入. 一般使用 开源字体即可,商用需要花钱~ 将下载好的 ttf 格式字体放入项目下文件夹: 样式文件中增加配置:(main.css) 即可 ...

  4. 51电子-STC89C51开发板:使用KEIL编译汇编代码

    全部内容请点击目录列表查看: 51电子-STC89C51开发板:<目录> ---------------------------  正文开始  ---------------------- ...

  5. docker 安装portainer容器后,启动/Portainer 安装MySQL并开启远程访问

    启动命令: docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --nam ...

  6. oracle form lov 查询慢

    设置lov属性,如下:

  7. char 与 string 互转 byte与string互转 list<string>与string[]互转 char与byte互转

    class Program    {        static void Main(string[] args)        {                                   ...

  8. comment out one line in the file with sed

    sed -i "/test2/s/^/#/" test.log https://jaminzhang.github.io/linux/sed-command-usage-summa ...

  9. 实现docker run命令

    基于宿主机来创建容器 执行命令 <自己动手写Docker>code-3.1 ./mydocker run -ti /bin/bash 代码流程 1. 解析参数.2. 通过clone来for ...

  10. 在Mac的哪里可以找到bashrc文件