数据库系统原理
  • 数据库系统原理
  • 引言
    • 数据库系统概述
  • 关系模型介绍
    • 关系数据库结构
    • 数据库模式
    • 关系代数
      • 选择运算
      • 投影运算
      • 笛卡尔运算
      • 连接运算
      • 集合运算
      • 其他运算
  • SQL介绍
    • SQL语言分类
    • SQL数据类型
    • SQL数据库操作
    • SQL数据表操作
    • SQL数据操纵语言
    • SQL数据查询语言
    • 集合运算
    • 聚集函数
  • 中级SQL
    • 连接查询
    • 内连接
    • 外连接
    • 交叉连接和自连接
    • 视图
    • 完整性约束
    • SQL用户和授权
  • 高级SQL
    • 函数
    • 存储过程
    • 触发器
  • ER模式数据库设计
    • 数据库设计过程概览
    • 需求分析
    • 实体-联系模型
      • 复杂属性
      • 映射基数和弱实体集
    • 将E-R图转换为关系模式
    • E-R模型设计
  • 关系数据库设计
    • 数据库设计规范化
    • 函数依赖理论
    • 关系范式
  • 半结构化数据
    • 半结构化数据
  • 应用程序开发
    • ADO.NET访问数据库技术
    • 断开模式数据查询
    • 连接模式数据更新
  • 数据存储结构
    • 磁盘
    • 文件的存储
    • 文件的逻辑结构
    • 文件组织
  • 索引
    • 索引基本概念
    • B树索引
    • B+树索引
    • MySQL索引的基本语法
    • 联合索引
  • 查询处理
    • 查询处理概述
  • 查询优化
    • 查询优化概述
    • 查询树的启发式优化(代数优化算法)
  • 事务
    • 事务的概念
    • 事务的特性
    • MySQL事务处理
    • 可串行化
  • 并发控制
    • 并发控制概述
    • 封锁
    • 两阶段封锁协议封锁
    • 多粒度封锁
    • 活锁和死锁
    • 基于时间戳排序的并发控制
    • 乐观控制法
  • 恢复系统
    • 数据库恢复概述
    • 数据库恢复的实现技术
    • 基于检查点的数据库恢复
Powered by GitBook
On this page
  • 内置函数
  • 自定义函数
  1. 高级SQL

函数

内置函数

字符串函数、数字函数、日期函数、高级函数(可以直接调用)

自定义函数

自定义函数有且只有一个返回值,就像普通的函数一样,可以直接在表达式中嵌入调用。

自定义函数的语法:

create [or replace] function function_name[(parameter_list)]
		returns datatype {IS|AS} [local_declarations]
		begin
				executable_statements
				[EXCEPTION exception_handlers]
		end [function_name];

说明:

  • function_name是函数的名称

  • parameter_list是参数列表

  • local_declarations是局部声明

  • executable_statements是可执行语句

  • exception_handlers是异常处理程序

示例:创建一个函数,输出hello world字符串

delimiter 
create function hello() 
returns varchar(64)
begin
		declare str varchar(64); 
		set str = 'hello world';
		return str;
end 

# 调用函数
select hello()

SQL中,delimiter 命令的作用是定义sql语句的分割符。

SQL中默认的语句分割符是分号,写存储过程或函数等语句块时,中间会包含分号,所以语句块不能成为一个整体,执行的时候就会报错,所以执行这样的语句块时,先用delimiter 定义其他的符号作为分割符,执行完语句之后再用delimiter ; 恢复成系统默认的。

delimiter 
create function score_grade(s float)
returns char(10)
begin 
		declare g char(10) default '';
		select (case
				when s is null then '无成绩'
				when s <60 then '不及格'
				when s >=60 and s < 70 then '及格'
				when s >=70 and s < 80 then '中等'
				when s >=80 and s < 90 then '良好'
				when s >=90 then '优秀'
				else
						'未知'
				end) into g;
				return g;
end 

select score_grade(45)
PreviousSQL用户和授权Next存储过程

Last updated 4 months ago