如何在mysql中更新存储过程中的临时表行

时间:2011-04-20 11:47:12

标签: mysql stored-procedures

我编写了一个存储过程(getAllInitializedContact())来从不同的表中获取数据.getAllInitializedContact()

CREATE DEFINER=`root`@`192.168.1.15` PROCEDURE `getAllInitializedContactNext`()
BEGIN

 DROP TEMPORARY TABLE IF EXISTS temp_users;
 CREATE TEMPORARY TABLE temp_users (
                                SELECT

                                c.id as contactId,
                                c.first_name as contactName,
                                c.email_address as contactEmailAddress,
                                sl.id as subscriberListId,
                                sl.name as subscriberListName, 
                                sl.display_name as subscriberListDisplayName,
                                sl.from_email_address,<br/>
                                sl.opt_in_msg_subject as subject,
                                sl.opt_in_msg_content as content,
                                sl.opt_in_msg_signature as signature,
                                csl.identifier
                                FROM contact c

                                          INNER JOIN contact_subscriber_list csl ON csl.contact_id=c.id
                                          INNER JOIN subscriber_list sl ON sl.id=csl.sub_list_id
                                          INNER JOIN contact_sub_list_status csls ON csls.id=csl.status_id  where csls.description='initialized');
END

但现在我想更新结果集。所以我创建了一个临时表(temp_users),我需要对临时表(temp_users)中的某些列做一些更新。但是我不明白如何迭代它并更新temp_table.i尝试使用while循环并且不知道它是如何应用的(while循环).can我可以使用while循环吗?我该如何申请?需要帮助

问候
的Kosala

2 个答案:

答案 0 :(得分:0)

当您只需更新它们时,不确定为什么要使用游标更新tmp表中的行 - 请参阅以下示例:

drop table if exists foo;
create table foo
(
foo_id int unsigned not null auto_increment primary key,
value int unsigned not null default 0
)
engine=innodb;

insert into foo (value) values (10),(20),(30);

drop procedure if exists bar;

delimiter #

create procedure bar()
begin

create temporary table tmp engine=memory select * from foo;

update tmp set value = value + 100;

select * from tmp;

drop temporary table if exists tmp;

end #

delimiter ;

call bar();

答案 1 :(得分:0)

我在使用更新时出错,因此无法正常工作。我虽然可以帮助某人,所以可以分享:

要使更新与临时表一起使用,要更新的数据必须与要更新的列类型匹配。您不能用数字更新字符串/文本/ varchar列。这是行不通的。