PostgreSQL 存储过程(函数)创建和基本语法

PostgreSQL官方文档

http://www.postgres.cn/docs/10/index.html

Postgresql过程语言官方文档
http://www.postgres.cn/docs/10/xplang.html

Postgresql查看当前版本
select version();

PostgreSQL函数创建格式

drop function if exists [函数名];
create function [函数名] ([参数]) returns [返回值] as
 $$
declare 
  [变量声明]
begin
  [sql逻辑]
end;
$$
language 'plpgsql';

示例1

create or replace function calculate (num1 int, num2 int, opr char(1)) returns int as
 $$
declare 
  num int;
begin
   --raise notice 'num1:%,num2:%;opr:%', num1, num2, opr;
   if opr = '-' then num := num1 - num2; 
   elseif opr = '+' then num := num1 + num2;
   elseif opr = '*' then num := num1 * num2; 
   elseif opr = '/' then num := num1 / num2; 
   else 
      raise exception 'opr参数值只能为(-,+,*,/):当前opr的值:%', opr;
   end if;
   return num;
end
$$
language 'plpgsql';

示例2


create or replace function calculate (num1 int, num2 int, opr char(1), out num int) as
$$
begin
   if opr = '-' then num := num1 - num2; 
   elseif opr = '+' then num := num1 + num2;
   elseif opr = '*' then num := num1 * num2; 
   elseif opr = '/' then num := num1 / num2; 
   else 
      raise exception 'opr参数值只能为(-,+,*,/):当前opr的值:%', opr;
   end if;
end
$$
language 'plpgsql';

调用

select calculate(1, 1, '+');

基本语法

以下简要摘自官方文档,只做抛砖引玉的作用,更详细的说明请查看上面提供官方文档地址。

1、条件

IF ... THEN ... END IF

IF ... THEN ... ELSE ... END IF

IF ... THEN ... ELSIF ... THEN ... ELSE ... END IF
CASE ... WHEN ... THEN ... ELSE ... END CASE

CASE WHEN ... THEN ... ELSE ... END CASE

2、循环

LOOP

[<<label>>]
LOOP
	...
	IF ... THEN 
		CONTINUE [label] [WHEN boolean-expression];
	END IF;
    EXIT [label] [WHEN boolean-expression];
END LOOP [label];

WHILE

[<<label>>]
WHILE boolean-expression LOOP
    ...
END LOOP [label];

FOR

[<<label>>]
FOR name IN [REVERSE] expression .. expression [BY expression] LOOP
    ...
END LOOP [label];

通过查询结果循环

[<<label>>]
FOR target IN query LOOP
    ...
END LOOP [label];

通过数组循环

[<<label>>]
FOREACH target [SLICE number] IN ARRAY expression LOOP
    ...
END LOOP [label];

捕获错误抛异常

[<<label>>]
DECLARE
    ...
BEGIN
    ...
EXCEPTION
    WHEN condition [ OR condition ... ] THEN
       RAISE NOTICE '提示';
    WHEN condition [ OR condition ... ] THEN
       RAISE NOTICE '提示,%,%', bianliang1,bianliang2;
END;
  • 7
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL简介:MS Sqlserver、Sybase、Informix等多种数据库的起源均可追溯至数据库大师Michael Stonebreaker的Ingres项目。Stonbreaker大师在离开Informix CEO的位置后,启动了Ingres的后续项目,这就是Postgresql,这是具有正统高贵血缘的开源数据库系统,在今天以性能稳定和高度开放著称。在Oracle收购Mysql后,业内人士担心Mysql会被闭源,逐渐将应用迁移到其它的数据库选择上,PostgreSQL是一项很好的选择,它具备商业数据库几乎所有的特性,高度支持SQL语言,对开发人员友好,它的过程语言pgsql和Oracle的PLSQL是如此相像,以致于迁移应用几乎不用作过多的修改。今天Postgresql的应用越来越广泛,正在快速蹿红。目前国内对PostgreSQL的使用,主要反映在两个范畴1 用于取代MySQL和Oracle2 作为数据库产品原型,通过修改源码构筑自己的数据库,例如通过使用pgsql解析器,省去自己编写sql解析器的困难。某些拿了政府大量补贴的“国产数据库”软件就是这么干的(在这里就不揭穿是哪家了^_^),EMC的分布式关系式数据库Greenplum就是基于pg,加入分布式处理后脱胎换骨所成。课程概述:像编写数据库的人一样理解Postgresql的实现,让我们这些具有聪明的头脑的人更容易、更简单的运用数据库技术,可以从开发角度掌握扩展数据库功能的设计实现,让我们徜徉在Postgresql的世界。本次课程是构在一个公司要封装发展自有版本的Postgresql数据库的背景上,用真实项目迁移到Postgresql而对数据库做的改进的工作为蓝本,课程为你讲述Postgresql实现,讲述实际项目应用对Postgresql改进需的过程。课程为了同学更容易掌握Postgresql数据库,特意安排了六周的Postgresql使用课程,让从未接触过Postgresql的同学可以顺利上手使用该数据库,做到了循序渐进。课程目标:掌握Postgresql数据库使用,掌握功能扩展二次开发。授课对象:熟悉数据库原理,Linux使用,C/C++语言。对开源数据库Postgresql感兴趣。预期收获:学会Postgresql的使用。在源码级上了解PostgreSQL。知道Postgresql如何实现,从而获得相关数据库内核研发的机会。能力提升对C++的掌握,掌握在socket、IO、memory、Thread方面在Linux环境下的编程。对数据库引擎开发工作有一定的认识,能够融入数据库应用的方方面面。是SQL开发工程师、DBA升级成为架构师的机会。课程内容:第一课Postgresql使用基础:发展历程、安装、库。第二课Postgresql使用基础:客户端使用、基本对象管理。第三课Postgresql使用基础:开发应用中的基本特性。第四课Postgresql使用高级:全库备份还原。第五课Postgresql使用高级:双机环境搭。第六课Postgresql使用高级:复制环境搭。第七课Postgresql引擎开发基础:开发环境准备。第八课Postgresql引擎开发基础:内核逻辑结构和运行结构实现分析,跟踪调试数据库,熟悉源代码结构。 第九课Postgresql引擎开发基础:SQL语法分析器、优化器实现分析,扩展系统函数。第十课Postgresql引擎开发深入:数据迁移工具实现分析,修改完善COPY命令。第十一课Postgresql引擎开发深入:执行优化器实现分析,增加兼容其它数据库存储过程功能。第十二课Postgresql引擎开发深入:数据库数据字典实现分析,扩展系统性能动态视图。第十三课发布数据库引擎:扩展并运行数据库单元测试。第十四课发布数据库引擎:构CentOS环境下RPM形式发布包。第十五课发布数据库引擎:大型项目迁移到自主研发数据库中,数据库层面的功能完善需求分析与设计
### 回答1: MySQLPostgreSQL存储过程语法有一些不同。 MySQL存储过程语法使用 BEGIN 和 END 来定义存储过程的开始和结束,并使用 DECLARE 来定义变量。另外,MySQL 使用 CALL 来执行存储过程PostgreSQL存储过程语法使用 CREATE FUNCTION 来创建存储过程,并使用 $n 来定义变量。另外,PostgreSQL 使用 SELECT 或 PERFORM 来执行存储过程。 举个例子: MySQL: ``` DELIMITER // CREATE PROCEDURE test_procedure() BEGIN SELECT 'Hello, World!'; END // DELIMITER ; ``` PostgreSQL: ``` CREATE OR REPLACE FUNCTION test_procedure() RETURNS text AS $$ BEGIN RETURN 'Hello, World!'; END; $$ LANGUAGE plpgsql; ``` 总的来说,MySQLPostgreSQL存储过程语法上有一些差异,但大体上都是类似的。 ### 回答2: MySQLPostgreSQL是两个常用的关系型数据库管理系统,它们在存储过程编写的语法上存在一些区别。 首先,在MySQL中,存储过程使用的语法是类似于标准的SQL语法的。存储过程通常由BEGIN和END语句包围,并使用DELIMITER语句定义语句的分隔符。在存储过程中,可以使用IF、LOOP和BEGIN/END等控制结构,以及声明变量和使用游标等功能。MySQL存储过程的定义可以包含输入、输出以及输入输出参数。 而在PostgreSQL中,存储过程的语法更加接近于PL/pgSQL语言。存储过程的定义使用CREATE FUNCTION语句,并使用LANGUAGE指定为plpgsql。在存储过程中,可以使用IF、FOR循环、WHILE循环等控制结构,以及声明变量和使用游标等功能。与MySQL不同的是,PostgreSQL存储过程的定义可以包含输入、输出以及输入输出参数,还可以定义返回类型。 此外,MySQLPostgreSQL存储过程的异常处理上也存在差异。在MySQL中,可以使用DECLARE HANDLER语句来处理异常,当异常发生时会执行相应的操作。而在PostgreSQL中,使用EXCEPTION子句可以捕获异常,并通过使用RAISE语句来引发异常。 总的来说,虽然MySQLPostgreSQL存储过程的语法上有些许不同,但它们都能够实现类似的功能,例如封装复杂的逻辑、提高数据库性能和可维护性等。根据具体的需求和使用习惯,选择适合自己的数据库管理系统以及存储过程的编写语法是很重要的。 ### 回答3: MySQLPostgreSQL都是常用的关系型数据库管理系统之一,它们的存储过程编写语法有一些区别。 首先,MySQL存储过程编写语法相对简单。在MySQL中,使用DELIMITER语句来定义自定义分隔符,以区分语句块中的多个语句。存储过程定义以CREATE PROCEDURE语句开始,后跟存储过程名字、参数列表和BEGIN-END语句块,其中可以包含一系列的SQL语句和流程控制语句,最后以END结束。MySQL还允许使用DECLARE语句定义局部变量。 而PostgreSQL存储过程编写语法相对复杂一些。在PostgreSQL中,存储过程定义以CREATE OR REPLACE FUNCTION语句开始,后跟函数名、参数列表和返回值类型。存储过程的主体由$$和$$之间的代码块定义,可以包含多个SQL语句和流程控制语句。与MySQL不同的是,PostgreSQL使用DO语句块来定义匿名存储过程,它可以在不创建函数的情况下直接执行一段代码。 此外,MySQLPostgreSQL存储过程的特性上也有一些区别。MySQL存储过程不支持递归调用和异常处理,而PostgreSQL支持这些功能。此外,PostgreSQL还提供了丰富的内置函数和扩展函数,使得编写复杂的存储过程更加灵活和强大。 综上所述,MySQLPostgreSQL存储过程编写语法在语法结构和特性上存在一些区别。熟悉这些区别,开发人员可以根据不同的需求选择合适的数据库管理系统和存储过程编写方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值