2017-09-12 7 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;