一、变量
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
本文探讨了数据库中的存储过程和函数,详细介绍了如何使用变量和定义条件进行数据处理。通过一个实例展示了如何利用唯一索引实现数据的插入与更新,确保数据的正确性。
415

被折叠的 条评论
为什么被折叠?



