存储过程其实就是函数,由一组 sql 语句组成,实现比较复杂的数据库操作;

存储过程 是 存储在 数据库服务器 上的,用户可以像调用 sql 自带函数一样 调用存储过程

语法解析

CREATE [OR REPLACE] FUNCTION function_name (arguments)
RETURNS return_datatype AS $variable_name$
DECLARE
declaration;
[...]
BEGIN
< function_body >
[...]
RETURN { variable_name | value }
END; LANGUAGE plpgsql;

很容易理解,不多解释

下面我对一张表进行简单操作,逐步递进的介绍存储过程的语法

步骤1-基础版

into 表示把结果赋值给 后面的变量,该变量必须在 declare 提前声明

调用存储过程

select mycount3()

步骤2-把 sql 语句赋给变量

create or replace function mycount3()
returns integer as $$ declare
mysql text;
counts integer; begin
mysql:='select count("CD_ID") from "CDS"';
execute mysql into counts;
return counts;
end; $$ language plpgsql;

步骤3-带变量,且 sql 语句用字符串拼接

create or replace function mycount4(tableName text, columnName text)
returns text as $$ declare
mysql text; begin
mysql:='select count('
|| quote_ident(columnName)
|| ') from '
|| quote_ident(tableName); return mysql; end; $$ language plpgsql;

1. 函数的参数必须声明类型

2. || 表示字符串拼接符号

3. 存储过程中的对象不能直接引用变量,要用 quote_ident,它的作用是为字符串加上 双引号

4. 在 sql 语句中,大写,全部会变成小写,如果想保留大写,需要加 双引号

调用存储过程

select mycount4('CDS', 'CD_ID');

返回

select count("CD_ID") from "CDS"

可以看到,输入参数是单引号,经过 quote_ident 后,自动变成双引号,保留了大写

步骤4-换一种拼接方式,并且函数体加了 if 判断

create or replace function mycount4(tableName text, columnName text)
returns integer as $$ declare
mysql text;
counts integer; begin
mysql:='select count("' || $2 || '") from "' || $1 || '" ';
execute mysql into counts using tableName, columnName; if counts > 100 then
return counts;
else return 1;
end if; end; $$ language plpgsql;

1. 用 using 调取变量,此时需要自己加 双引号 以保留 大写

2. $1 $2 对应的是函数的参数位置,跟 using 后的顺序无关

3. if 后面有个 then

4. text 可变长度字符串

5. 每句末尾必须带分号

参考资料:

https://www.yiibai.com/postgresql/postgresql-functions.html

https://www.cnblogs.com/ssqhan/p/7289931.html#top

PostgreSQL-存储过程的更多相关文章

  1. Postgresql 存储过程调试 1

    看来人真的有些力不从心,半个月前还很得意掌握的简单的Postgresql 存储过程的调试,一段时间没使用,做新功能就忘了! Postgresql 在开源的数据库里面算是很强悍的了,但现在就是不方便调试 ...

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

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

  3. 调用PostgreSQL存储过程,找不到函数名的问题

    PostgreSQL的表,函数名称都是严格区分大小写的,所以在使用的时候没有注意大小写问题容易导致找不到函数名的错误,但最近两天我们发现,如果函数参数使用了自定义的数据类型,也会发生这个问题. 问题描 ...

  4. postgresql 存储过程动态更新数据

    -- 目标:动态更新表中数据 -- 老规矩上代码-----------------------------tablename 表名--feildname 字段名数组--feildvalue 字段值数组 ...

  5. PostgreSQL存储过程<转>

    原创文章,转载请务必将下面这段话置于文章开头处(保留超链接).本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/12/27/SQL4_存储过程_St ...

  6. PostgreSQL存储过程(2)-基于PL/PgSQL的存储过程

    介绍 PL/pgSQL 是PostgreSQL 数据库系统的一个可加载的过程语言. PL/pgSQL 的设计目标是创建一种可加载的过程语言,可以 用于创建函数和触发器过程, 为SQL 语言增加控制结构 ...

  7. PostgreSQL 存储过程/函数

    1.有用的链接 postgresql 常用小函数 Postgresql数据库的一些字符串操作函数 PostgreSQL function里面调用function PostgreSQL学习手册(函数和操 ...

  8. postgresql 存储过程动态插入数据 2

    最近学习postgresql,正一个小活要用上,所以就开始学习了!然而,学习的过程极其艰辛,但却也充满了乐趣. 一般来说数据库的操作不外如何增,删,改,查,而首要的就是要添加数据到数据库中,因为以前的 ...

  9. Postgresql存储过程调试:PostgreSQL 之 Function NOTICE

    转载自http://zhenghaoju700.blog.163.com/blog/static/13585951820116782843994/ 先安装一个PostgreSQL(见补充知识) 比较O ...

  10. PostGreSQL存储过程

    1 返回结果集的存储过程 -- drop FUNCTION getall();CREATE or REPLACE FUNCTION getall() RETURNS SETOF users  AS$B ...

随机推荐

  1. hive 调优(二)参数调优汇总

    在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maximum 每个tasktracker ...

  2. Js 之获取对象key值

    var date = Object.keys(data); Object.keys( ) 会返回一个数组,数组中是这个对象的key值列表 所以只要Object.keys(a)[0], 就可以得只包含一 ...

  3. 使用linux中,最让人无语的是软件源

    使用linux的最大的障碍是软件源的配置和系统的安装,这两个搞定了,坚持使用下去都不是问题,如果实在不行,还可以win10下的linux子系统可以作为基本的使用.下面记录两个软件源: Found 2 ...

  4. jenkins创建工程

    1.新建一个工程 2.添加工程名,点击创建一个自由分格的软件项目 3.配置源码管理 4.增加工程构建步骤,选中调用顶层maven目标

  5. Hadoop环境搭建|第四篇:hive环境搭建

    一.环境搭建 注意:hive版本不能太高,否则会出现兼容性问题 1.1.上传hive安装包 创建文件夹用于存放hive文件命令:mkdir hive 1.2.解压hive安装包 命令:tar -zxv ...

  6. tar中的参数 cvf,xvf,cvzf,zxvf的区别

    tar cvf etcbak.tar etc/  打包一个tar tar xvf etcbak.tar         解开一个tar tar cvzf etcbak.tar.gz etc/ 打包压缩 ...

  7. Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写

    测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...

  8. php mvc 模式的开发注意事项

    1.控制器中: 如果不涉及到数据库的就在控制器中. empty($res['code']) ? $this->error($res['msg']) : $this->success($re ...

  9. Sublime 添加∕删除右键菜单.bat

    Sublime 添加∕删除右键菜单.bat @ECHO OFF & PUSHD %~DP0 & TITLE >NUL 2>&1 REG.exe query &quo ...

  10. 交互式绘图工具gunplot

    Gnuplot是一个命令行的交互式绘图工具(command-driven interactive function plotting program).用户通过输入命令,可以逐步设置或修改绘图环境,并 ...