MySQL存储过程和函数简单写法(2)

CREATE  FUNCTION  name_from_employee (emp_id INT ) 
          RETURNS VARCHAR(20) 
          BEGIN 
              RETURN  (SELECT  name 
              FROM  employee 
              WHERE  num=emp_id ); 
          END

  上述代码中,存储函数的名称为name_from_employee;该函数的参数为emp_id;返回值是VARCHAR类型。SELECT语句从employee表查询num值等于emp_id的记录,并将该记录的name字段的值返回。代码的执行结果如下:

mysql> DELIMITER && 
mysql> CREATE  FUNCTION  name_from_employee (emp_id INT ) 
    -> RETURNS VARCHAR(20) 
    -> BEGIN 
    -> RETURN  (SELECT  name 
    -> FROM  employee 
    -> WHERE  num=emp_id ); 
    -> END&& 
Query OK, 0 rows affected (0.00 sec) 
mysql> DELIMITER ;

结果显示,存储函数已经创建成功。该函数的使用和MySQL内部函数的使用方法一样。

变量的使用

在存储过程和函数中,可以定义和使用变量。用户可以使用DECLARE关键字来定义变量。然后可以为变量赋值。这些变量的作用范围是BEGIN…END程序段中。本小节将讲解如何定义变量和为变量赋值。

1.定义变量

  MySQL中可以使用DECLARE关键字来定义变量。定义变量的基本语法如下:

DECLARE  var_name[,...]  type  [DEFAULT value]

  其中, DECLARE关键字是用来声明变量的;var_name参数是变量的名称,这里可以同时定义多个变量;type参数用来指定变量的类型;DEFAULT value子句将变量默认值设置为value,没有使用DEFAULT子句时,默认值为NULL。

【示例3】 下面定义变量my_sql,数据类型为INT型,默认值为10。代码如下:

DECLARE  my_sql  INT  DEFAULT 10 ;

2.为变量赋值

  MySQL中可以使用SET关键字来为变量赋值。SET语句的基本语法如下:

SET  var_name = expr [, var_name = expr] ...

  其中,SET关键字是用来为变量赋值的;var_name参数是变量的名称;expr参数是赋值表达式。一个SET语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。

【示例4】 下面为变量my_sql赋值为30。代码如下:

SET  my_sql = 30 ;

  MySQL中还可以使用SELECT…INTO语句为变量赋值。其基本语法如下:

SELECT  col_name[,…]  INTO  var_name[,…] FROM  table_name  WEHRE  condition

  其中,col_name参数表示查询的字段名称;var_name参数是变量的名称;table_name参数指表的名称;condition参数指查询条件。

【示例5】 下面从employee表中查询id为2的记录,将该记录的d_id值赋给变量my_sql。代码如下:

SELECT  d_id  INTO  my_sql  FROM  employee  WEHRE  id=2 ;

定义条件和处理程序

  定义条件和处理程序是事先定义程序执行过程中可能遇到的问题。并且可以在处理程序中定义解决这些问题的办法。这种方式可以提前预测可能出现的问题,并提出解决办法。这样可以增强程序处理问题的能力,避免程序异常停止。MySQL中都是通过DECLARE关键字来定义条件和处理程序。本小节中将详细讲解如何定义条件和处理程序。

1.定义条件

  MySQL中可以使用DECLARE关键字来定义条件。其基本语法如下:

DECLARE  condition_name  CONDITION  FOR  condition_value 
condition_value: 
      SQLSTATE [VALUE] sqlstate_value | mysql_error_code

  其中,condition_name参数表示条件的名称;condition_value参数表示条件的类型;sqlstate_value参数和mysql_error_code参数都可以表示MySQL的错误。例如ERROR 1146 (42S02)中,sqlstate_value值是42S02,mysql_error_code值是1146。

【示例6】 下面定义"ERROR 1146 (42S02)"这个错误,名称为can_not_find。可以用两种不同的方法来定义,代码如下:

//方法一:使用sqlstate_value 
DECLARE  can_not_find  CONDITION  FOR  SQLSTATE  '42S02' ; 
//方法二:使用mysql_error_code 
DECLARE  can_not_find  CONDITION  FOR  1146 ;

2.定义处理程序

MySQL中可以使用DECLARE关键字来定义处理程序。其基本语法如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/407d97e10f7b212d3e9c97f1ddc1feab.html