网站支付宝接口付费,网站建设完成之后要索取哪些,山西省住房城乡建设厅门户网站,长宁广州网站建设文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述
存储过程和函数是在数据库中定义的一些SQL语句的集合#xff0c;然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可… 文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述
存储过程和函数是在数据库中定义的一些SQL语句的集合然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复编写相同的SQL语句。而且。存储过程和函数是在MySQL服务器中存储和执行的。可以减少客户端和服务端的数据传输。
二、创建存储过程
创建存储过程和函数是指将经常使用的一组SQL语句组合在一起并将这些SQL语句当作一个整体存储在MySQL服务器中。存储程序可以分为存储过程和函数。在MySQL中创建存储过程使用的语句CREATE PROCEDURE。其语法形式如下
CREATE PROCEDURE procedure_name([proc_param[,...]]) routine_body在上述语句中参数procedure_name表示要创建的存储过程名字参数proc_param表示存储过程的参数参数routine_body表示存储过程的SQL语句代码可以使用BEGIN…END来标志SQL语句的开始和结束。 **注意**在具体创建存储过程时存储过程名不能与已经存在的存储过程名重名。
proc_param中每个参数的语法形式如下 在上述语句中每个参数由三部分组成分别为输入/输出类型、参数名和参数类型。其中输入/输出类型有三种类型分别为IN表示输入类型、OUT表示输出类型、INOUT表示输入/输出类型。param_name表示参数名type表示参数类型可以是MySQL软件所支持的任意一个数据类型。
三、在创建过程中使用变量
在存储过程和函数中可以定义和使用变量。用户可以使用关键字DECLARE来定义变量。然后为变量赋值。这些变量的作用范围是在BEGIN…END程序段中。
1.定义变量 在MySQL中可以使用DECLARE关键字来定义变量。定义变量的基本语法如下
DECLARE var_name[,...] type [DEFAULT value]其中关键字DECLARE是用来声明变量的参数var_name是变量的名称可以同时定义多个变量参数type用来指定变量的类型DEFAULT value子句将变量默认值设置为value没有使用DEFAULT子句时默认值为NULL。 定义变量cid数据类型为INT类型默认值为10代码如下
DECLARE cid INT DEFAULT 10;2.为变量赋值 在MySQL中可以使用关键字SET来为变量赋值SET语句的基本语法如下
SET var_nameexpr[,var_nameexpr]...其中关键字SET用来为变量赋值参数var_name是变量的名称参数expr是赋值表达式。一个SET语句可以同时为多个变量赋值。各个变量的赋值语句之间用逗号隔开。 例如将变量tmp_id赋值为88代码如下
SET tmp_id 88;在MySQL中还可以使用SELECT…INFO语句为变量赋值。其基本语法如下
SELECT col_name[,...] INFO var_name[,...] FROM table_name WHERE condition其中参数col_name表示查询的字段名称参数var_name是变量的名称参数table_name指表的名称参数condition指查询条件。
四、光标的使用
查询语句可能查询出多条记录在存储过程和函数中使用光标来逐条读取查询结果集中的记录。光标的使用包括声明光标、打开光标、使用光标和关闭光标。光标必须声明在处理程序之前并且声明在变量和条件之后。
1.声明光标 在MySQL中可以使用DECLARE关键字来声明光标其基本语法如下
DECLARE cursor_name CURSOR FOR select_statement;其中参数cursor_name表示光标的名称参数select_statement表示SELECT语句的内容。
2.打开光标 在MySQL中使用关键字OPEN来打开光标其基本语法如下
OPEN cursor_name;其中参数cursor_name表示光标的名称。
3.使用光标 在MySQL中使用关键字FETCH来使用光标其基本语法如下
FETCH cursor_name INTO var_name [,var_name...];其中参数cursor_name表示光标的名称参数var_name表示将光标中的SELECT语句查询出来的信息存入该参数中。var_name必须在声明光标之前定义好。
4.光标光标 在MySQL中使用关键字CLOSE来关闭光标其基本语法如下
CLOSE cursor_name;其中参数cursor_name表示光标的名称。
五、流程控制的使用
在存储过程和函数中可以使用流程来控制语句的执行在MySQL中可以使用IF语句、CASE语句、LOOP语句、LEAVE语句ITERATE语句、REPEAT语句和WHILE语句来进行流程控制。
1.IF语句 IF语句用来进行条件判断。根据条件执行不同的语句其语法的基本形式如下
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list]
...
[ELSE statement_list] END IF参数search_condition表示条件判断语句参数statement_list表示不同条件的执行语句。
下面是一个IF语句的示例代码如下
IF age 20 THEN SET count1 count1 1;ELSEIF age 20 THEN count2 count2 1;ELSE count3 count3 1;
END IF;该示例根据age与20的大小关系来执行不同的SET语句。如果age值大于20将count1的值加1如果age值等于20就将count2的值加1其他情况将count3的值加1。IF语句都需要使用END IF来结束。 2.CASE语句 CASE语句可实现比IF语句更复杂的条件判断其语法的基本形式如下
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]
[ELSE statement_list]
END CASE其中参数case_value表示条件判断的变量参数when_value表示变量的取值参数statement_list表示不同的when_value值的执行语句。
下面是一个CASE语句的示例。代码如下
CASE levelWHEN 20 THEN SET attack attack 5;WHEN 30 THEN SET attack attack 10;WHEN 40 THEN SET attack attack 15;ELSE SET attack attack 1;
END CASE当级别level值为20时attack值加5当级别level值为30时attack值加10当级别level值为40时。attack值加15否则attack 1。CASE语句使用END CASE结束。
3.LOOP语句 LOOP语句可以使某些特定的语句重复执行实现一个简单的循环。LOOP语句本身没有停止循环只有遇到LEAVE语句等才能停止循环。LOOP语句的语法形式如下
[begin_label:] LOOP
statement_list
END LOOP [end_label]其中参数begin_label和参数end_label分别表示循环开始和结束的标志这两个标志必须相同。而且都可以省略参数statemeng_list表示需要循环执行的语句。
下面是一个LOOP语句的示例代码如下
ADD_num:LOOPSET count count 1;
END LOOP add_num;该示例循环执行count加1的操作。因为没有跳出循环这个循环成了一个死循环。LOOP循环都以END LOOP结束。
4.LEAVE语句 LEAVE语句主要用于跳出循环控制其语法形式如下
LEAVE label其中参数label表示循环的标志。
下面是一个LEAVE语句的示例代码如下
add_num:LOOPSET count count 1IF count 100 THENLEAVE add_num;END IF;
END LOOP add_num;该示例循环执行count值加1的操作。当count的值等于100时LEAVE语句跳出循环。 5.ITERATE语句 ITERATE语句也是用来跳出循环的语句但是ITERATE语句是跳出本次循环然后直接进入下一次循环ITERATE语句的语法形式如下
ITERATE label其中参数label表示循环的标志。
下面是一个ITERATE语句的示例代码如下
add_num:LOOPset count count 1;IF count 100 THENLEAVE add_num;ELSE IF MOD(count, 3) 0 thenITERATE add_num;select * from student;
END LOOP add_num;该示例循环执行count加1的操作count的值为100时结束循环如果count的值能够整除3就跳出本次循环不再执行下面的SELECT语句。
6.REPEAT语句 REPEAT语句是有条件控制的循环语句当满足特定条件时就会跳出循环语句。REPEAT语句的基本语法形式如下
[begin_label:] REPEATUNTIL search_conditionEND REPEAT [end_label]其中参数statement_list表示循环的执行语句参数search_condition表示结束循环的条件满足该条件时循环结束。
下面是一个REPEAT语句的示例代码如下
REPEATSET countcount1;UNTIL count100
END REPEAT;该示例循环执行count加1的操作count值为100时结束循环。REPEAT循环都用END REPEAT结束。
7.WHILE语句 WHILE语句也是有条件控制的循环语句但WHILE语句和REPEAT语句是不一样的。WHILE语句是当满足条件时执行循环内的语句。WHILE语句的基本语法形式如下
[begin_label:] WHILE search_condition DOstatement_list
END WHILE [end_label]其中参数statement_condition表示循环执行的条件满足该条件时循环执行参数statement_list表示循环的执行语句。
下面是一个WHILE语句的示例。代码如下
WHILE count100 DOSET count count 1;
END WHILE;六、查看和删除存储过程
存储过程创建以后用户可以通过SHOW STATUS语句来查看存储过程的状态也可以通过SHOW CREATE语句来查看存储过程的定义。用户也可以通过查询information_schema数据库下的Routines表来查看存储过程的信息。
1.SHOW STATUS语句查看存储过程 在MySQL中可以通过SHOW STATUS语句查看存储过程的状态。其基本语法形式如下
SHOW PROCEDURE STATUS [like pattern];其中参数PROCEDURE表示查询存储过程参数LIKE pattern’用来匹配存储过程的名称。
2.SHOW CREATE语句查看存储过程的定义 在MySQL中可以通过SHOW CREATE 语句查看存储过程的状态语法形式如下
SHOW CREATE PROCEDURE proc_name其中参数PROCEDURE表示查询存储过程参数proc_name表示存储过程的名称。
3.information_schema.Routine表中查看存储过程的信息 存储过程和函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和函数的信息。其基本语法形式如下
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME proc_name;其中字段ROUTINE_NAME中存储的是存储过程和函数的列名称参数proc_name表示存储过程或函数的名称。
4.存储过程的删除 在MySQL中删除存储过程通过SQL语句DROP完成
DROP PROCEDURE proc_name;在上述语句中关键字DROP PROCEDURE用来实现删除存储过程参数proc_name表示所要删除的存储过程名称。