2013-03-07 52 views
0

我想創建程序使用limit選項要麼insert into .. with select ..或create table as select .....通在SQL stament運行的程序在mysql中

我想用limit只插入500K記錄一次,所以我正在使用while循環我設置count3這次,因爲我試圖插入1.5mil記錄。

call proc1(with long sql statement......................) 


DELIMITER //    
CREATE PROCEDURE proc1(IN sqllines text)    
    BEGIN  

    DECLARE valFrom INT;     
    DECLARE valTo INT;       
    DECLARE count INt default 0;     

     SET @sqlin = sqllines;   
     SET valFrom = 0;   
     SET valTo = 500000;   
     SET @sql = ('@sqlin LIMIT valFrom , valTo');  

WHILE count < 3 
DO 

    PREPARE stmt from @sql;   
    EXECUTE stmt;  

    SET valFrom = valFrom+500000;   
    SET valTo = valTo+500000;   
    set count = count + 1;    

END WHILE;   

END;    
//   
DELIMITER ; 
+0

你試圖通過將它分割成3個迭代插入來達到什麼目的?它與服務器執行相同的工作(甚至更多)工作。而且,你的問題在哪裏? – Najzero 2013-03-07 08:23:22

+0

我希望我所有的創建表與選擇從...並插入表中選擇從......想要使用動態分割程序或功能與限制選項和500K行的時間限制,以避免死鎖情況,這是造成我的應用程序用戶很麻煩。 – 2013-03-08 02:19:08

+0

我不能要求用戶每次運行時手動添加限制,因爲其中一些查詢是大型程序的一部分。 – 2013-03-08 02:20:17

回答

0

很抱歉地說,但是您無法將變量傳遞到T-SQL中的動態SQL語句中。

你可以在我自己發佈的問題here中找到更多信息。答案在這裏有詳細的解決方案。

+0

好的,謝謝,有沒有辦法我可以調用過程與我的sql語句動態分割插入限制選項和500K行限制。 – 2013-03-08 02:21:33

+0

將數據導入temp(與原始結構相同)表中,讓作業每隔x秒輪詢一次該表,並只將y行插入原始表(並將它們刪除/標記爲在臨時表中完成) – Najzero 2013-03-08 12:38:33