2011-04-25 5 views
1

저는 Mac OSX 용 설치 스크립트를 작성 중이며 셸 스크립트를 사용하여 데이터베이스와이 프로그램을 사용하는 데 필요한 모든 테이블을 만듭니다. 내가 직면하고있는 문제는 우리가 필요로하는 절차를 만드는 것입니다. 나는 구현의 여러 방법을 시도해 보았고 누군가가 모범을 알고 있는지 또는 가능한지 궁금해했다. 아래 절차는 간다. 나는 어떤 도움을 주셔서 감사합니다.MySQL 쉘 스크립트를 사용하여 프로 시저 만들기

절차 :

DELIMITER // 
CREATE PROCEDURE Hours_Procedure() 
BEGIN 
DECLARE avg_usage FLOAT; 
DECLARE max_time TIMESTAMP; 
DECLARE counter INTEGER; 
DECLARE NumOfNodes INTEGER; 
DECLARE Num_Hour_Records INTEGER; 

SET counter = 0; 
SELECT MAX(Node_Num) INTO NumOfNodes FROM Minutes; 

loop1 : LOOP SET avg_usage = 0.0; 
SET counter = counter + 1; 
IF counter = (NumOfNodes + 1) THEN LEAVE loop1; 
ELSE SELECT AVG(x.Power_Usage), MAX(x.Record_Time) INTO avg_usage, max_time FROM(
    SELECT M.Power_Usage, M.Record_Time FROM Minutes M 
    WHERE M.Node_Num = counter ORDER BY RID DESC LIMIT 60) x; 
    INSERT INTO Hours(Node_Num, Record_Time, Power_Usage) VALUES (counter, max_time, avg_usage); 
    DELETE FROM Minutes WHERE Node_Num = counter ORDER BY RID ASC LIMIT 60; 
END IF; 
END LOOP loop1; 

DROP INDEX Hours_Index ON Hours; 
CREATE INDEX Hours_Index ON Hours(RID, Node_Num); 
END// DELIMITER ; 

내가 뭘하려 : $ createProc이 프로 시저를 작성하는 코드이다

$mysql -u $_adminuser -h $_host -Bse "USE $_hostdb; $createProc;" 

.

답변

3

procedure.sql 파일에 저장 한 프로 시저를 사용하여 다음을 시도하십시오. 명령 행에서 데이터베이스를 지정하여 USE 명령문을 제거합니다.

$mysql --batch --silent -u $_adminuser -h $_host $_hostdb < procedure.sql 
+0

.sql 파일에는 없습니다. 설치 프로그램 패키지가 생성 된 이후로 디렉토리에 액세스 할 수 없습니다. – ars265

+0

당신의 문제가'\\\'와';'의 쉘 탈출 때문인 것 같습니다. 문자열의 모든 문자를 이스케이프하면'-e'가있는 문자열로 호출 할 수 있습니다. 확실하지. –

+0

실제로 솔루션이 잘 작동하도록 .sql 파일을 보유하도록 설치 프로그램 패키지를 편집하는 방법을 찾았습니다. 도와 줘서 고마워. – ars265

관련 문제