2017-09-12 5 views
0

私は70000レコードを持っているテーブルbook_meetingsを持って、私はこれを少し変更して別のテーブルにこのデータを移行したいMysqlストアドプロシージャを作成しました。レコードは新しいテーブルに挿入されますが、値はnullとして設定されます。 book_meetingsテーブルから4つの列しか選択せず、テーブルに挿入したいとします。私が欲しいもの更新とMysqlのストアドプロシージャを使用してテーブルの行を挿入

id int 
date date 
meet_at time 
duration_in_hours decimal 

は、上記の値に基づいてstart_dateend_dateを計算しています。例えば

:その後、

if date ="2017-09-08" , meet_at is "09:00:00" and duration_in_hours is 1.5 

start_date will be "2017-09-08 09:10:00"

end_date= start_date_duration_in_hour 
end_date will be "2017-09-08 09:10:00" 

start_date = concat date and meet_at 
end_date = start_date + duration_in_hours 

and insert this values in new table 

別の良いアイデアがあるならば、

CREATE PROCEDURE book_meetings8() 
BEGIN 
     -- Declare local variables 
    DECLARE done BOOLEAN DEFAULT 0; 
    DECLARE meet_at TIME; 
    DECLARE start_date DATETIME; 
    DECLARE tmp_date VARCHAR(255); 
    DECLARE end_date DATETIME; 
    DECLARE end_recurring_date DATE; 
    DECLARE date1 DATE ; 
    DECLARE id INTEGER(11); 
    DECLARE duration DECIMAL(8,2); 
    DECLARE minutes INTEGER(11); 


    -- Declare the cursor 
     DECLARE iter CURSOR 
    FOR 
     SELECT id,date, meet_at,duration_in_hours FROM 
     book_meetings LIMIT 100; 
    -- Declare continue handler 
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; 

    -- Open the cursor 
    OPEN iter; 
    -- Loop through all rows 
    REPEAT 
    -- Get order number 

    FETCH iter INTO id,date1,meet_at,duration; 
    SET minutes = duration * 60; 
    SET start_date = CAST(date1 as char) + " "+CAST(meet_at as 
    char); 
    SET end_date = CAST(start_date as datetime) + INTERVAL 
minutes MINUTE;  

    INSERT INTO 
    book_meetings_1(start_date,end_date) 
    VALUES(start_date,end_date); 
    -- End of loop 
    UNTIL done END REPEAT; 
-- Close the cursor 
CLOSE iter; 
    END; 

答えて

0

を提案してくださいまあ、私は(単一のSQL文で、問題の上解決していますストア手順なしで挿入と更新を一度にすべて記録する)

INSERT INTO temp_diary.book_meetings (id,start_date,end_date) SELECT id,CONCAT(`date`, ' ', `meet_at`) as start_date,DATE_ADD(concat(date,' ',meet_at), INTERVAL `duration_in_hours` HOUR) as end_date FROM estate.book_meetings; 
関連する問題