2017-10-16 26 views
0

我必须将数据从资源表移动到事件表以移除资源表。 考虑,表架构如下, 的MySQL>递减事件如何使用游标创建存储过程以将数据从一个表格移动到另一个具有验证的表格(Mysql)

+-----------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+-----------------+--------------+------+-----+---------+----------------+ 
| event_id  | bigint(20) | NO | PRI | NULL | auto_increment | 
| path   | varchar(255) | YES |  | NULL |    | 
+-----------------+--------------+------+-----+---------+----------------+ 

的MySQL>递减资源;

+--------------------+--------------+------+-----+---------+----------------+ 
| Field    | Type   | Null | Key | Default | Extra   | 
+--------------------+--------------+------+-----+---------+----------------+ 
| resource_id  | bigint(20) | NO | PRI | NULL | auto_increment | 
| jcr_id    | varchar(500) | YES |  | NULL |    | 
+--------------------+--------------+------+-----+---------+----------------+ 

事件路径包含jcr_id或RESOURCE_ID,如果它包含jcr_id然后用jcr_id从种源表中其他更新事件路径值项,然后删除。

考虑下面的伪代码,而每次迭代RESOURCE_ID,

result = select event_id from event where path=_resource_id; 
if result is empty 
    delete from resource where resource_id= _resource_id; 
else 
    update event set path=jcr_id where event_id= result; 
    delete from resource where resource_id= _resource_id; 
+0

移动数据的第一步是学习如何格式化问题中的数据。 –

+0

是的,正在使用 – Mayur

+0

请用适当的例子说明要求。 –

回答

0

试试这个。

DELIMITER // 
CREATE PROCEDURE `new_procedure`() 
BEGIN 
    declare row_min int; 
    declare row_max int; 
    declare resource_id int; 

    select 1, max(resource_id) 
    into row_min, row_max 
    from resource; 

    while row_min <= row_max 
    do 
     select resource_id into resource_id 
     from resource 
     where resource_id = row_min; 

     -- Iterating for every record. Add your update code here. 

     set row_min = row_min + 1; 
    end while; 
END// 
DELIMITER ; 
相关问题