您当前的位置:首页 > 电脑百科 > 数据库 > 百科

GaussDB数据库存储过程介绍

时间:2023-05-29 14:28:48  来源:  作者:OSC开源社区
一、前言

华为云数据库 GaussDB 是一款高性能、高安全性的云原生数据库,在数据库领域处于领先地位。而在 GaussDB 中,存储过程是一个不容忽视的重要功能。本文将深入介绍 GaussDB 存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等方面,为读者提供全方位的指导与帮助。

存储过程是一个可重用的、批处理的 SQL 语句代码块,可以包含多条 SQL 语句,通常用于执行复杂的数据操作、提高数据库的性能和安全性,以及简化数据库应用程序的开发和维护。在 GaussDB 中,存储过程的使用可以使数据库应用程序更具灵活性、数据完整性更高、执行速度更快。

二、GaussDB 中的定义

商业规则和业务逻辑可以通过程序存储在 GaussDB 中,这个程序就是存储过程。存储过程是 SQL、PL/SQL、JAVA 语句的组合。存储过程使执行商业规则的代码可以从应用程序中移动到数据库。从而,代码存储一次能够被多个程序使用。

三、存储过程的使用场景

存储过程是一种储存在数据库中的预编译的程序,它被定义为一系列的 SQL 语句,并且被用来执行一系列的数据库操作。在实际运用中,存储过程可以提高性能、提高开发效率,同时也具备良好的安全性能。

1、下面列举几个存储过程的适用场景

  • 复杂任务处理:存储过程可以用于一些需要处理复杂任务的场景,例如一个较为复杂的 SQL 语句,需要处理多个条件和大量的数据,使用存储过程可以提高效率。
  • 数据持久化:存储过程可以在服务器端创建和存储处理逻辑,而客户端通过调用存储过程即可处理需要的数据。
  • 数据访问权限管理:存储过程可以通过设置不同的访问权限来提高数据访问的安全性。 2、存储过程特点:
  • 频繁的、重复性、可封装、易管理。
  • 复杂的数据事务处理,可以使用存储过程实现事务的一致性和数据完整性,同时提高执行效率。
  • 对于常用的查询,可以把它们封装成存储过程,并将其缓存到内存中,在每次执行时,不需要从磁盘中读取数据,提高查询速度。
四、存储过程的使用优缺点

在使用存储过程时,我们需要充分了解其使用优缺点,从而在实际开发过程中进行有针对性的选择,下面罗列了一些常见的存储过程的使用优缺点。

1、优点:高效率、可复用、可维护

  • 在执行大量的操作时,存储过程可以减少数据库客户端与数据库的通信次数,从而提高了执行效率。
  • 在多次使用同一函数时,存储过程所需要的内存资源和 CPU 时间较少,因此,存储过程可以被看作一种可复用的数据库对象。
  • 在维护和升级方面,存储过程具有良好的维护性,可以被视为一种良好的 API,简化系统的维护过程。
  • 存储过程的安全性和可维护性更高,减少了数据库维护的工作量。 2、缺点:难度较高、对数据库依赖性强
  • 存储过程需要使用专门的 SQL 软件进行开发,所以对开发人员的技能水平要求比较高,并且使用错误可能会抛出不可预知的异常。
  • 存储过程涉及到多个数据库对象,使用不当有可能产生不可预知的结果。当数据库结构发生变化时,存储过程也需要进行相应调整,因此,存储过程对数据库的依赖性比较强。
  • 开发和维护存储过程需要一定的技术水平,对于小型数据库来说,使用存储过程的必要性较小。
  • 存储过程的执行需要对存储过程进行编译,对于频繁修改的存储过程,可能会影响数据库的性能。
五、存储过程的示例及示例解析 1、GaussDB 存储过程语法格式

CREATE[ORREPLACE]PROCEDUREprocedure_name

[({

[argname ][argmode ]argtype [{ DEFAULT|: =|=} expression ]} [,...])]

[

{ IMMUTABLE |STABLE |VOLATILE }

|{ SHIPPABLE |NOTSHIPPABLE }

|{ PACKAGE}

|[NOT]LEAKPROOF

|{ CALLED ONNULLINPUT|RETURNSNULLONNULLINPUT|STRICT}

|{

[EXTERNAL]SECURITYINVOKER|[EXTERNAL]SECURITYDEFINER|AUTHIDDEFINER|AUTHIDCURRENT_USER}

|COSTexecution_cost

|SETconfiguration_parameter { [TO|=]value|FROMCURRENT}

][...]

{ IS|AS}

plsql_body

/

–说明:定义存储过程,在 SQL 语句末,需要输入 “/” (执行)。

参数说明

•OR REPLACE

当存在同名的存储过程时,替换原来的定义。

•procedure_name

创建的存储过程名称,可以带有模式名。取值范围:字符串,要符合标识符的命名规范。

•argmode

参数的模式。须知:VARIADIC 用于声明数组类型的参数。取值范围:IN,OUT,INOUT 或 VARIADIC。缺省值是 IN。只有 OUT 模式的参数后面能跟 VARIADIC。并且 OUT 和 INOUT 模式的参数不能用在 RETURNS TABLE 的过程定义中。

•argname

参数的名称。取值范围:字符串,要符合标识符的命名规范。

•argtype

参数的数据类型。可以使用 % ROWTYPE 间接引用表的类型,或者使用 % TYPE 间接引用表或复合类型中某一列的类型。取值范围:可用的数据类型。

・IMMUTABLE、STABLE 等

行为约束可选项。各参数的功能与 CREATE FUNCTION 类似,详细说明见 CREATE FUNCTION

•plsql_body

PL/SQL 存储过程体。须知:当在存储过程体中进行创建用户等涉及用户密码相关操作时,系统表及 csv 日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。

说明:argname 和 argmode 的顺序没有严格要求,推荐按照 argname、argmode、argtype 的顺序使用。

2、GaussDB 存储过程语法示例

我们来看几个具有代表性的 GaussDB 数据库存储过程示例,以进一步了解其编写和使用方式。

示例一:

下面是一个简单的 GaussDB 存储过程示例:

–创建一个存储过程。

CREATEORREPLACEPROCEDUREprc_add

(

param1 ININTEGER,

param2 INOUTINTEGER

)

AS

BEGIN

param2: =param1 +param2 ;

dbe_output .print_line ('result is: '||to_char (param2 ));

END;

/

–调用此存储过程。

SELECTprc_add (2,3);

–删除存储过程

DROPPROCEDUREprc_add ;

解析:上面的代码是创建了一个名为 prc_add 的存储过程,该存储过程有两个参数,一个输入参数 param1 和一个输入 / 输出参数 param2,数据类型均为整型(INTEGER)。在存储过程的主体中,对输入 / 输出参数 param2 进行了修改,将其值赋为 param1 + param2。在调用存储过程时,输入 2 作为输入参数 param1 的值,3 作为输入 / 输出参数 param2 的值。最后,存储过程的结果输出到 dbe_output 控制台,显示 “result is: 5”。

总的来说,这个存储过程的功能是将输入参数 param1 与输入 / 输出参数 param2 的值相加,并将相加后的结果输出。它可以在程序中多次使用,以简化代码。

示例二

–创建一个存储过程,将带着调用它的用户的权限执行。

CREATETABLEtb1 (a integer);

CREATEORREPLACEPROCEDUREinsert_data (v integer)

SECURITYINVOKER

AS

BEGIN

INSERTINTOtb1 VALUES( v );

END;

/

–调用此存储过程。

CALLinsert_data (123);

–查看结果

select*fromtb1 ;

–删除存储过程

DROPPROCEDUREinsert_data ;

解析:上述代码实际上创建了一个带有一个输入参数的存储过程 insert_data,并将其定义为以调用者的权限来运行。当调用该存储过程时,将传递一个整数参数作为输入,该参数将插入一个新行到 tb1 表中,该新行的值为该整数。然后通过执行 select 语句查看 tb1 表中的所有数据行。执行完整段代码后,将看到只有一行数据,该行的值为 123,这是由 insert_data 存储过程插入的。

3、存储过程的调用方法

存储过程的调用方法主要有两种:通过客户端请求调用和通过触发器自动调用。通过客户端请求调用通常是手动调用,通常使用以下两种方法调用存储过程:

1)CALL 语句

CALLstored_procedure_name(…)

2)SELECT 语句

SELECTstored_procedure_name(…)

通过触发器自动调用通常是在特定操作的情况下自动执行存储过程。例如,当插入一条记录时,可以设置触发器来自动执行存储过程。

七、总结

本文详细介绍了 GaussDB 存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等内容。使用存储过程可以提高效率、可维护性,同时具备良好的安全性能。在使用存储过程之前,我们需要充分了解其使用优缺点,从而在实际开发过程中进行有针对性的选择。只有深入了解 GaussDB 的存储过程的使用方法和技巧,才能在开发过程中得心应手,更好地配合 GaussDB 实现高效的数据管理和业务处理。

对于需要频繁重复执行的 SQL 语句,我们可以将其封装成一个存储过程,方便管理和提高效率。当存储过程执行达到一定规模时,我们需要注意存储过程的维护和优化,以确保存储过程的执行性能。作为一个高可靠性的全球化分布式关系型数据库,华为云数据库 GaussDB 提供了丰富的存储过程支持,为存储过程的开发、管理和执行提供了更多的优化策略和高可用性保障。

本次介绍就到此,欢迎大家测试、交流!

END



Tags:数据库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  Search: 数据库  点击:(5)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28  Search: 数据库  点击:(14)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  Search: 数据库  点击:(13)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12  Search: 数据库  点击:(27)  评论:(0)  加入收藏
让数据库和缓存数据保持一致的三种策略
如何保证缓存和数据库的一致性,这算得上是个老生常谈的话题啦,看到好多技术新人在写更新缓存数据代码,采用了非常复杂甚至“诡异”的方案,甚为不解。一、背景目前随着缓存架构方...【详细内容】
2024-02-20  Search: 数据库  点击:(37)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  Search: 数据库  点击:(54)  评论:(0)  加入收藏
一篇文章,彻底理解数据库操作语言:DDL、DML、DCL、TCL
本篇文章以具体的SQL语句讲解了数据库SQL语言四大分类(数据定义语言DDL,数据操作语言DML,数据查询语言DQL,数据控制语言DCL),同时也介绍了事务控制语言TCL。最近与开发和运维讨论...【详细内容】
2024-01-30  Search: 数据库  点击:(43)  评论:(0)  加入收藏
一文读懂:什么是数据库,它到底有啥用?
提到数据库,可能很多人会很陌生。但据库其实已经渗入我们生活的方方面面,像网上购物、扫码点餐、抢红包等等应用背后都离不开数据库的支持。可以说数据库是支撑各类应用软件运...【详细内容】
2024-01-25  Search: 数据库  点击:(43)  评论:(0)  加入收藏
oracle数据库基础学习
在当今数字化时代,数据库已成为企业运营的关键要素。而Oracle数据库,作为全球领先的企业级数据库管理系统,更是备受推崇。本文将带您深入了解Oracle数据库的基础知识,帮助您从零...【详细内容】
2024-01-20  Search: 数据库  点击:(90)  评论:(0)  加入收藏
一个流行的支持超多数据库的ORM库
Sequelize 是一个流行的 Node.js ORM(对象关系映射)库,用于在 Node.js 中操作关系型数据库。它支持多种数据库系统,如 PostgreSQL、MySQL、SQLite 和 MSSQL,并提供了简单易用的 A...【详细内容】
2024-01-15  Search: 数据库  点击:(77)  评论:(0)  加入收藏
▌简易百科推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  京东云开发者    Tags:向量数据库   点击:(5)  评论:(0)  加入收藏
原来 SQL 函数是可以内联的!
介绍在某些情况下,SQL 函数(即指定LANGUAGE SQL)会将其函数体内联到调用它的查询中,而不是直接调用。这可以带来显著的性能提升,因为函数体可以暴露给调用查询的规划器,从而规划器...【详细内容】
2024-04-03  红石PG  微信公众号  Tags:SQL 函数   点击:(4)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28    51CTO  Tags:NoSQL   点击:(14)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  dbaplus社群    Tags:数据库连接池   点击:(13)  评论:(0)  加入收藏
八个常见的数据可视化错误以及如何避免它们
在当今以数据驱动为主导的世界里,清晰且具有洞察力的数据可视化至关重要。然而,在创建数据可视化时很容易犯错误,这可能导致对数据的错误解读。本文将探讨一些常见的糟糕数据可...【详细内容】
2024-03-26  DeepHub IMBA  微信公众号  Tags:数据可视化   点击:(7)  评论:(0)  加入收藏
到底有没有必要分库分表,如何考量的
关于是否需要进行分库分表,可以根据以下考量因素来决定: 数据量和负载:如果数据量巨大且负载压力较大,单一库单一表可能无法满足性能需求,考虑分库分表。 数据增长:预估数据增长...【详细内容】
2024-03-20  码上遇见你  微信公众号  Tags:分库分表   点击:(15)  评论:(0)  加入收藏
在 SQL 中写了 in 和 not in,技术总监说要炒了我……
WHY?IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?1、效率低项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 ↓select *...【详细内容】
2024-03-18  dbaplus社群    Tags:SQL   点击:(6)  评论:(0)  加入收藏
应对慢SQL的致胜法宝:7大实例剖析+优化原则
大促备战,最大的隐患项之一就是慢SQL,对于服务平稳运行带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,在日常开发中如何避免出现慢SQL,出现了慢SQL应该按照什...【详细内容】
2024-03-14  京东云开发者    Tags:慢SQL   点击:(5)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12    InfoQ  Tags:数据库   点击:(27)  评论:(0)  加入收藏
SQL优化的七个方法,你会哪个?
一、插入数据优化 普通插入:在平时我们执行insert语句的时候,可能都是一条一条数据插入进去的,就像下面这样。INSERT INTO `department` VALUES(1, '研发部(RD)', &#39...【详细内容】
2024-03-07  程序员恰恰  微信公众号  Tags:SQL优化   点击:(20)  评论:(0)  加入收藏
站内最新
站内热门
站内头条