2017-05-16 14 views
1
DELIMITER $ 
DROP PROCEDURE IF EXISTS CREATE_BACKUP$ 
CREATE PROCEDURE CREATE_BACKUP() 
BEGIN 
DECLARE BACK INT DEFAULT 0; 
SELECT TABLE_NAME 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'STUDENTDB' 
; 

    SHOW_LOOP:LOOP 

     IF BACK = 1 
     THEN 
     LEAVE SHOW_LOOP; 
     END IF; 

     CREATE TABLE STUDENT_BACKUP 
     AS SELECT * FROM STUDENT; 
     CREATE TABLE SCORE_BACKUP 
     AS SELECT * FROM SCORE; 
     CREATE TABLE GRADE_EVENT_BACKUP 
     AS SELECT * FROM grade_event; 
    END LOOP SHOW_LOOP; 

END$ 
DELIMITER ; 

こんにちは、この手順を実行すると、複数回実行されます。だから、 "STUDENT_BACKUP table already exists"というエラーが表示され、2回目の実行時に表示されます。 1回だけ実行するにはどうすればよいですか?プロシージャ実行時間

+1

ループは何に必要ですか? – maSTAShuFu

+0

なぜそこに 'LOOP'がありますか? – tadman

答えて

1

MySQLでは、エラーが発生しないようにCREATE TABLE IF NOT EXIST...を使用できます。詳細は、CREATE TABLE syntaxを参照してください。
あなたの質問を解決するには、INFORMATION_SCHEMAビューを使用してください。同様の解決策がexisting topicにあります。