我编写了一个存储过程(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
答案 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列。这是行不通的。