SQL存储过程:

由来:在具体应用中,一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句。因此,mysql提供了数据库对象存储过程和函数。

定义:存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。和函数的区别在于,函数有返回值,存储过程没有。

优点:

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权

创建存储过程:

在MySQL中创建存储过程通过SQL语句CREATE PROCEDURE来实现,其语法形式如下:
CREATE PROCEDURE procedure_name([procedure_paramter[,…]])
    [characteristic…] routine_body
实例:

DELIMITER $$     //设置分隔符
CREATE PROCEDURE proce_employee_sal ()
COMMENT'查询所有雇员的工资'
BEGINSELECT salFROM t_employee;
END$$
DELIMITER ;    //恢复分隔符

调用存储过程:

用 call调用存储过程

创建函数:

在MySQL中创建函数通过SQL语句CREATE Function来实现,其语法形式如下:
CREATE FUNCTION function _name([function_paramter[,…]])
    [characteristic…] routine_body
例子:根据雇员编号查询薪资

DELIMITER $$
CREATE FUNCTION func_employee_sal (empno INT(11))   //传入值RETURNS DOUBLE(10,2)     //返回值
COMMENT'查询某个雇员的工资'
BEGINRETURN (SELECT salFROM t_employeeWHERE t_employee.empno=empno);
END$$
DELIMITER ;

调用函数:

call/select  func_employee_sal(7035);

是否和创建触发器的过程很类似呢?


存储过程中的变量:

1.声明变量

在MySQL中定义变量通过关键字DECLARE来实现,其语法形式如下:

DECLARE var_name[,…] type [DEFAULT value]

2.赋值变量

在MySQL中为变量赋值通过关键字SET来实现,其语法形式如下:

SET var_name=expr[,…]

当为变量赋值时,除了上述语法外,还可以通过关键字“SELECT……INTO”语句来实现,其语法形式如下:

SELECT field_name[,…] INTO var_name[,…]FROM table_nameWHERE condition

存储过程中的游标:

sql的查询语句可以返回多条记录结果,如果想要遍历这些查询结果,就可以使用游标来实现。相当于C++里的指针。

1.声明游标
DECLARE cursor_name CURSOR FOR select_statement;
2.打开游标
OPEN cursor_name
3.使用游标
FETCH cursor_name INTO var_name [,var_name] …
4.关闭游标
CLOSE cursor_name

例子:统计工资大于999的雇员人数

DROP PROCEDURE IF EXISTS emplayee_count;
DELIMITER $
#创建存储过程
CREATE PROCEDURE emplayee_count (OUT NUM INTEGER)      //out表示输出,num为输出的变量
BEGIN
#声明变量
DECLARE   emplayee_sal INTEGER;DECLARE   flag INTEGER;
#声明游标
DECLARE cursor_emplayee CURSOR FOR SELECT sal FROM t_employee;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
#设置结束标志
SET flag=0;SET NUM=0;
#打开游标
OPEN cursor_emplayee;
#遍历游标指向的结果集
FETCH cursor_emplayee INTO emplayee_sal;
WHILE flag<>1 DO
IF emplayee_sal >999 THEN
SET num=num+1;
END IF;
FETCH cursor_emplayee INTO emplayee_sal;   //下一条记录
END WHILE;
#关闭游标
CLOSE cursor_emplayee;
END$
DELIMITER ;

查看存储过程和函数:

  • 通过SHOW PROCEDURE STATUS语句查看储存过程状态信息
  • 通过SHOW FUNCTION STATUS语句查看函数状态信息
  • 通过SHOW CREATE PROCEDURE语句查看储存过程定义信息
  • 通过SHOW CREATE FUNCTION语句查看函数定义信息

修改存储过程:

在MySQL数据库管理系统中修改存储过程通过SQL语“ALTER PROCEDURE”来实现,其语法形式如下:

ALTER PROCEDURE procedure_name

[characteristic…]

修改函数:

在MySQL数据库管理系统中修改函数通过SQL语“ALTER FUNCTION”来实现,其语法形式如下:

ALTER FUNCTION function_name

[characteristic…]

删除存储过程和函数:

DROP PROCEDURE proce_name;

DROP FUNCTION func_name;

转载于:https://www.cnblogs.com/LUO77/p/5880485.html

SQL存储过程和函数相关推荐

  1. SQL存储过程与函数

    目录 1. 存储过程概述 1.1 理解 1.2 分类 2. 创建存储过程 3. 调用存储过程 3.1 调用格式 4.存储函数的使用 4.1 语法分析 4.2 调用存储函数 4.4 对比存储函数和存储过 ...

  2. sql 存储过程和函数

    最近在学习数据库,上课过程中总是在许多知识点有或多或少的问题,对于这些问题的产生,大概是由于我听课习惯所造成的吧,好啦,废话不多说,开始今天到主题吧. 首先介绍SQL的存储过程,先来给它定义,存储过程 ...

  3. SQL 存储过程 procedure 讲解+代码实例

    文章目录 1. 存储过程概述 2. 创建存储过程 create procedure 2.1. 参数 in.out.inout 3. 调用存储过程 call 4. 查看存储过程 4.1. 查看存储过程的 ...

  4. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

    很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR ...

  5. 删除数据库中所有存储过程和函数的sql语句

    -删除数据库中所有存储过程和函数的sql语句 USE [TmpDb] SELECT  IDENTITY( INT,1,1 ) flag ,         [name] NAMES,xtype INT ...

  6. jpa 自定义sql if_跟飞哥学编程:SQL入门-:函数、存储过程和触发器

    最后不要忘记:SQL是一种结构化(Structured)的语言(Language),所以它具有 编程语言的特性 声明变量和赋值 所谓变量,可以是看成一个存储数据的容器,所有它里面存储的值是可以变化的. ...

  7. oracle字段公式怎么执行,Oracle 在存储过程或函数中执行字符串sql PDF 下载

    主要内容: 有时,我们需要在存储过程或函数中根据条件拼凑一些sql字符串语句,然后再执行拼凑后的sql字符串,如何做到呢? 参考以下代码: FUNCTION CALCULATE_TARGET_SCOR ...

  8. mysql 存储过程 sql变量_SQL基础-变量 存储过程和函数

    一.变量 1.系统变量:全局变量.会话变量 说明:由系统提供,属于服务器层面.如果是全局级别,则需要加 global,如果是会话级别,则需加 session,如果不写,则默认 session.全局变量 ...

  9. 【SQL】之存储过程与函数

    [SQL]之存储过程与函数 存储过程 类型1:无参数无返回值 类型2:带out 类型3:带in 类型4:带in和out 类型5:带inout 存储函数 存储过程和存储函数对比 存储过程和函数的查看,修 ...

最新文章

  1. chubby分布式锁服务概述
  2. Python全栈开发——描述符
  3. noe4j 多层关系查询
  4. 阿里月薪5万招程序员,招聘要求让人窒息!
  5. 共济失调对我们的危害你知道吗
  6. 【Linux】一步一步学Linux——getfacl命令(118)
  7. 了解这些坑,再也不会出现诡异的BUG了~
  8. bzoj 1096 斜率优化DP
  9. 【火炉炼AI】深度学习006-移花接木-用Keras迁移学习提升性能
  10. 一步一步优化Windows XP(转)
  11. gcc下载及安装教程
  12. 无人驾驶综述:国外国内发展历程
  13. 利用VGA输出音频信号
  14. 手绘小人多彩论文答辩PPT模板
  15. ps盖印图层在哪里_PS盖印图层快捷键
  16. Scala使用ALS模型做推荐
  17. 网站被降权了怎么办?被降权后的正确处理方法
  18. 《让子弹飞》系列——前四章的部分解读
  19. 【人脸识别】调用百度AI开放平台人脸识别接口,获取图片结果
  20. 轻松洁净地面,还能自动清洗烘干拖布,只需一台追觅扫拖机器人

热门文章

  1. 最新京东炸年兽活动一键做任务工具v1.4
  2. 织梦cms第四版仿七猫技术导航源码 附安装教程
  3. tp5易支付完整版源码
  4. ExpressJS入门指南
  5. Ubuntu文件夹有锁标志(去除) 命令打包解包
  6. 网站是如何跟踪监视你的
  7. 两种最短路径(测地距离)的算法——Dijkstra和Floyd
  8. 98.验证二叉搜索树
  9. Linux——查看系统的日志的一些实用操作
  10. 《C和指针》——数组的奇怪形式