2017-11-22 3 views
2

MySQL 용 저장 프로 시저를 처음 작성하는 중입니다.저장 프로 시저 내에서 임시 테이블 만들기

저장 프로시 저는 임시 테이블을 만든 다음 일부 테이블에 데이터를 삽입해야합니다.

저장 프로 시저 외부에서 일반 테이블을 수동으로 생성하면 저장된 proc이 임시 테이블을 생성하지 않으므로 저장된 proc이 생성되고 정확히 내가 수행 한 작업을 수행합니다.

그런 다음 임시 테이블을 저장 프로 시저에 추가하면 MySQL Workbench는 예기치 않은 끝과 CREATE 문을 보여줍니다.

다음은 내가 임시 테이블을 만드는 것은 내가 잘못하고있는 중이 야 그래서 불가능하다는 말을 아무 것도 볼 수없는 내 저장된 프로 시저

DELIMITER // 
    CREATE PROCEDURE getLast24Hours() 
    BEGIN 
#End of the below line I get unexpected end without this it works fine 
     CREATE TABLE hours (`Hour` VARCHAR(8) NOT NULL, `Value` INT NOT NULL DEFAULT 0, PRIMARY KEY(`Hour`)); 

     DECLARE crt_time VARCHAR(8); 
     DECLARE counter INT; 
     DECLARE currentTime DATETIME; 

     SET currentTime = NOW(); 

     SET crt_time = DATE_FORMAT(currentTime, '%d-%m %H'); 
     SET counter = 0; 
     WHILE counter < 23 DO 
      INSERT INTO hours (`Hour`) VALUES (crt_time); 
      SET currentTime = currentTime - INTERVAL 1 HOUR; 
      SET crt_time = DATE_FORMAT(currenttime, '%d-%m %H'); 
      SET counter = counter + 1; 
     END WHILE; 
    END // 
    DELIMITER ; 

입니다.

도움을 주셔서 감사합니다.

+0

_ "MySQL의 워크 벤치는 예기치 않은 끝과 생성 문장의 욕실을 보여줍니다."_이이를 인용 편집 할 수 정확한 오류, 위치 등? 이 표현은 명확하지 않습니다. –

답변

5

https://dev.mysql.com/doc/refman/5.7/en/declare.html는 말한다 :

DECLARE 만 BEGIN ... END 복합 문 내에서 허용되며 그 시작, 다른 문 앞에 에 있어야합니다. 마찬가지로

(강조 광산)

다음

CREATE PROCEDURE getLast24Hours() 
    BEGIN 
     DECLARE crt_time VARCHAR(8); 
     DECLARE counter INT; 
     DECLARE currentTime DATETIME; 

     CREATE TABLE hours (`Hour` VARCHAR(8) NOT NULL, `Value` INT NOT NULL DEFAULT 0, PRIMARY KEY(`Hour`)); 
+0

나는 저장된 프로 시저의 중간에 선언을 허용하지 않는 것을 알지 못했다. 그게 다야. 당신의 도움을 주셔서 감사합니다 – Boardy

관련 문제