当前位置:Gxlcms > 数据库问题 > SQL存储过程和函数

SQL存储过程和函数

时间:2021-07-01 10:21:17 帮助过:2人阅读

由来:在具体应用中,一个完整的操作会包含多条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查询所有雇员的工资
BEGIN
    SELECT sal
    FROM 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查询某个雇员的工资
BEGIN
    RETURN (SELECT sal
        FROM t_employee
        WHERE 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_name

  WHERE 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

                  

	 	
                    
                    
                    
                    
                    
                

人气教程排行