数据库学习之存储过程及函数。

一、变量

    1、定义:
    DECLARE var_name type[DEFAULT value]
    例如,定义一个DATE类型的变量last_month_start:
    DECLARE last_month_start DATE


    2、变量的赋值:
    变量可以直接赋值或者通过查询赋值。
    (1)、直接赋值使用SET,可以赋常量或者赋表达式:
        SET var_name = expr 
    例如:
        SET last_month_start = DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH)
    (2)、查询赋值:
        select col_name into var_name ...
    例如:
        select vc_infoid into infoid where vc_name='E·T'


二、定义条件与处理

    1、条件定义;
        DECLARE condition_name CONDITION FOR  condition_value

    condition_value:
        SQLSTATE[VALUE] sqlstate_value
       |mysql_error_code


    2、条件处理
    DECLARE hander_type HANDLER FOR condition_value[...] sp_statement
    hander_type:
        CONTUNUE
        |exit
        |undo


    condition_value:
            SQLSTATE[VALUE] sqlstate_value
        |condition_name
        |SQLWARING
        |NOT FOUND
        |SQLEXCEPTION
        |mysql_error_code


    例如:
    主键冲突(23000 error):
    ->BEGIN
    ->    DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
    ->    SET @x = 1;
    ->    INSERT INTO ACTOR(ACTOR_ID) VALUES (201);
    ->    SET @x = 2;
    ->    INSERT INTO ACTOR(ACTOR_ID) VALUES (1);
    ->    SET @x = 3;

    ->END;

三、实例

    该例子功能:向数据库插入数据,通过唯一索引去重。如果根据唯一索引判定该数据已经存在数据库中,那么,就对这条数据进行更新,反之,该条数据没有在数据库里,则插入。                                                                                                              代码:

BEGIN
      DECLARE v_num INT DEFAULT 0;
      DECLARE id INT(10) UNSIGNED;      
      SET id = IF(LENGTH(TRIM(id))>0,CAST(id AS SIGNED),NULL);

      INSERT INTO info_card (                                        #向一张名为info_card的表中的一下字段插入数据(括号里的字段)
      enterprise_name,company_url,contact,contact_tel,
      address,main_business,pic_url,product_md5,product,
      title_md5,img_title,img_product)
      VALUES
      (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)                          #将这些数据赋值给以上的字段
      on duplicate key update                                        #如果通过唯一索引被识别为已存在的数据,那么就做更新,更新的数据为%s
      enterprise_name = %s,
      company_url = %s,
      contact = %s,
      contact_tel = %s,
      address = %s,
      main_business = %s,
      pic_url = %s,
      product_md5 = %s,
      product = %s,
      title_md5 = %s,
      img_title = %s,
      img_product = %s
END

猜你喜欢

转载自blog.csdn.net/topkipa/article/details/79354565