【发布时间】:2015-12-20 16:48:35
【问题描述】:
我正在将 oracle 数据库迁移到 mysql。 当子查询获取多条记录时,我面临更新特定表列的问题。
DECLARE
BEGIN
FOR TENORTYPE in (select gto.string_value, gtl.rowid from gtp_template_objectdata gto, gtp_template_lc gtl
where gto.template_id=gtl.template_id and gto.company_id = gtl.company_id and gto.name='tenor_type')
LOOP
update gtp_template_lc set tenor_type = TENORTYPE.string_value where rowid = TENORTYPE.rowid;
END LOOP;
COMMIT;
END;
/
上面是oracle代码。 我已经尝试过如下
DELIMITER //
CREATE PROCEDURE do_loop(i VARCHAR)
BEGIN
SET i=1;
loop_loop: LOOP
FOR TENORTYPE in (select gto.string_value,@rowid:=@rowid+1 as rowid from gtp_template_objectdata gto, gtp_template_lc gtl
where gto.template_id=gtl.template_id and gto.company_id = gtl.company_id and gto.name='tenor_type');
IF i <= select count(gto.string_value) from gtp_template_objectdata gto, gtp_template_lc gtl
where gto.template_id=gtl.template_id and gto.company_id = gtl.company_id and gto.name='tenor_type'
THEN
update gtp_template_lc set tenor_type = TENORTYPE.string_value where rowid = TENORTYPE.rowid;
SET i=i+1
ITERATE loop_loop;
END IF;
LEAVE loop_loop;
END LOOP loop_loop;
END//
DELIMITER ;
但在 mysql 中出现不正确的语法。子查询返回 2 列。
【问题讨论】:
标签: mysql oracle stored-procedures