关键字:
KingbaseES、PLSQL、基本对象
1.什么是PL/SQL?
1.1PL/SQL的定义
PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL),是数据库对SQL语句的扩展,在普通SQL语句的使用上增加了编程语言的特点,可以用来实现比较复杂的业务逻辑。
1.2PL/SQL的优点
1)与SQL紧密集成
2)高性能
3)高生产率
4)可移植性
5)可扩展性
6)可管理型
7)支持面向对象的编程
2.PL/SQL的基本对象
2.1匿名块
2.1.1匿名块的定义
没有名字的PL/SQL块被称为匿名块,无法被保存到数据库中,用于临时的写出,无法重复使用。
2.1.2匿名块的格式
\set SQLTERM /
DECLARE
变量的定义;(若没有变量需要定义,DECLARE可以省略)
BEGIN
执行语句;
如:DBMS_OUTPUT.PUT_LINE(v1);
END;
/
说明:
1)如果没有变量需要定义,那么DECLARE部分可以省略;
2)以BEGIN开始,以END结束的部分,不可以省略。
2.2存储过程
2.2.1存储过程的概念
存储过程是一种可以单独存储在数据库中的一种对象,用于封装一些业务处理逻辑,知识存储过程没有返回值,但是有输出参数。
2.2.2存储过程的使用
1、存储过程的创建
语法格式:CREATE PROCEDURE 存储过程名(参数1 参数1类型,…)IS
2、存储过程的调用
存储过程的调用有两种方式:
1)使用CALL调用
语法格式:CALL procedure_name();
2)在匿名块中直接使用procedure_name;调用
语法格式:
BEGIN
Procedure_name;
END;
/
3、存储过程的删除
语法格式:DROP PROCEDURE procedure_name;
2.3函数
2.3.1函数的相关概念
函数指用户自定义的函数,是一个可以单独存在的数据库对象,主要用于封装一些业务处理逻辑,同时在处理完成相关逻辑后必须返回一个结果值。
2.3.2函数的使用
1、函数的创建
语法格式:
CREATE FUNCTION 函数名(参数1 参数1类型, …) RETURN IS 函数的返回值类型;
2、函数的调用
函数的调用也有两种方式:
1)使用SELECT调用:
语法格式:SELECT function_name;
2)在匿名块中调用:
语法格式:
DECLARE
v1 datatype;
BEGIN
v1 := function_name();
END;
3、函数的删除
语法格式:DROP FUNCTION function_name;
2.3.3函数与存储过程的区别
相同点:
1)函数和存储过程都是数据库中的数据对象,可以单独存储;
2)函数和存储过程都是可以处理相关的业务逻辑;
3)函数和存储过程都是可以存在于PLSQL代码块中的;
不同点:
1)函数由返回值,存储过程没有;
2)存储过程有输出参数,而函数没有;
3)函数可以存在于SQL查询语句中,而存储过程不可以。
2.4触发器
2.4.1触发器的相关概念
1、定义:触发器是一种在事件发生时隐式地自动执行的PL/SQL块,不能接受参数,不能被显式调用。
2、触发器的使用场景:
1)启用/禁用对表和视图的修改;
2)强制数据一致性;
3)提供审计和日志记录;
4)防止无效的事务处理;
5)启用复杂的业务逻辑。
3、触发器的组成:
1)触发事件:引发触发器被触发的事件DML语句(INSERT、UPDATE、DELETE语句和对表和视图执行数据处理操作);
2)触发时间:即该触发器是在触发事件发生前(Before)还是之后(After)触发;
3)触发操作:触发器触发后要完成的事情;
4)触发对象:包括表和视图;
5)触发条件:有WHEN子句指定一个逻辑表达式,只有当该表达式为TRUE时,遇到触发事件才会自动执行触发操作;
6)触发频率:说明触发器内定义的动作被执行的次数。即语句级触发器还是行级触发器。
2.4.2触发器的使用
1、触发器的创建
语法格式:
CREATE TRIGGER 触发器名字 BEFORE|AFTER 触发器事件 ON table_name [for each row] ---行级触发器
[when trigger_condition]
TRIGGER_BODY
1)创建一张表goods用于存储商品种类:
2)创建一个序列用于后续数据:
3)创建一个行级触发器,该触发器在表goods插入数据时被触发,并在该触发器的主体中实现goods表的id列的值:
4)触发触发器,向表goods中插入两条记录,其中一条不指定id值由序列seq_id产生,另一条指定id值
2.5包
2.5.1包的相关概念
1、定义
包,Package,是一种数据库中的对象,一般主要用来管理一组函数和存储过程的单元,可以把某一类型或者某一个功能模块的函数和存储过程统一定义在一个包内,便于维护和管理。
2、包的组成
1)包规范:声明了包中的公共对象,包括变量、常量、类型、游标、函数和存储过程,在包规范中的对象不仅可以在包的内部使用,也可以被应用程序调用。公共对象下的作用域为包所在的模式。
2)包体:实现包规范中的函数和存储过程。
2.5.2包的使用
1、包的创建
包的创建分为两个部分,包头和包体;
1)包头的定义:
CREATE PACKAGE 包名 IS
--用于声明变量、函数、存储过程等
END 包名;
2)包体的定义:
CREATE PACKAGE BODY 包名 IS
--相关变量的赋值、函数和存储过程的实现逻辑等
BEGIN
<STATEMENT>;
END 包名;