1. 程式人生 > >資料庫學習之儲存過程及函式。

資料庫學習之儲存過程及函式。

一、變數

    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