GaussDB数据库存储过程介绍
文章目录
一、前言
二、GaussDB 中的定义
三、存储过程的使用场景
四、存储过程的使用优缺点
五、存储过程的示例及示例解析
1、GaussDB 存储过程语法格式
2、GaussDB 存储过程语法示例
3、存储过程的调用方法
七、总结
一、前言
二、GaussDB 中的定义
三、存储过程的使用场景
1、下面列举几个存储过程的适用场景
复杂任务处理:存储过程可以用于一些需要处理复杂任务的场景,例如一个较为复杂的 SQL 语句,需要处理多个条件和大量的数据,使用存储过程可以提高效率。
数据持久化:存储过程可以在服务器端创建和存储处理逻辑,而客户端通过调用存储过程即可处理需要的数据。
数据访问权限管理:存储过程可以通过设置不同的访问权限来提高数据访问的安全性。
2、存储过程特点:频繁的、重复性、可封装、易管理。
复杂的数据事务处理,可以使用存储过程实现事务的一致性和数据完整性,同时提高执行效率。
对于常用的查询,可以把它们封装成存储过程,并将其缓存到内存中,在每次执行时,不需要从磁盘中读取数据,提高查询速度。
四、存储过程的使用优缺点
1、优点:高效率、可复用、可维护
在执行大量的操作时,存储过程可以减少数据库客户端与数据库的通信次数,从而提高了执行效率。
在多次使用同一函数时,存储过程所需要的内存资源和 CPU 时间较少,因此,存储过程可以被看作一种可复用的数据库对象。
在维护和升级方面,存储过程具有良好的维护性,可以被视为一种良好的 API,简化系统的维护过程。
存储过程的安全性和可维护性更高,减少了数据库维护的工作量。
2、缺点:难度较高、对数据库依赖性强存储过程需要使用专门的 SQL 软件进行开发,所以对开发人员的技能水平要求比较高,并且使用错误可能会抛出不可预知的异常。
存储过程涉及到多个数据库对象,使用不当有可能产生不可预知的结果。当数据库结构发生变化时,存储过程也需要进行相应调整,因此,存储过程对数据库的依赖性比较强。
开发和维护存储过程需要一定的技术水平,对于小型数据库来说,使用存储过程的必要性较小。
存储过程的执行需要对存储过程进行编译,对于频繁修改的存储过程,可能会影响数据库的性能。
五、存储过程的示例及示例解析
1、GaussDB 存储过程语法格式
CREATE [ OR REPLACE ] PROCEDURE procedure_name
[ ( {
[ argname ] [ argmode ] argtype [ { DEFAULT | := | = } expression ]}[,...]) ]
[
{ IMMUTABLE | STABLE | VOLATILE }
| { SHIPPABLE | NOT SHIPPABLE }
| {PACKAGE}
| [ NOT ] LEAKPROOF
| { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }
| {
[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER}
| COST execution_cost
| SET configuration_parameter { [ TO | = ] value | FROM CURRENT }
][ ... ]
{ IS | AS }
plsql_body
/
•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 日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。
2、GaussDB 存储过程语法示例
下面是一个简单的 GaussDB 存储过程示例:
–创建一个存储过程。
CREATE OR REPLACE PROCEDURE prc_add
(
param1 IN INTEGER,
param2 IN OUT INTEGER
)
AS
BEGIN
param2:= param1 + param2;
dbe_output.print_line('result is: '||to_char(param2));
END;
/
SELECT prc_add(2,3);
DROP PROCEDURE prc_add;
–创建一个存储过程,将带着调用它的用户的权限执行。
CREATE TABLE tb1(a integer);
CREATE OR REPLACE PROCEDURE insert_data(v integer)
SECURITY INVOKER
AS
BEGIN
INSERT INTO tb1 VALUES(v);
END;
/
CALL insert_data(123);
select * from tb1;
DROP PROCEDURE insert_data;
3、存储过程的调用方法
1)CALL 语句
CALL stored_procedure_name(…)
SELECT stored_procedure_name(…)
七、总结
END
点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦
微信扫码关注该文公众号作者