2011-04-25 35 views
1

我正在使用Mac OSX的安裝腳本,並且正在使用shell腳本來創建數據庫以及我需要的程序使用的所有表。我面臨的問題是創建我們需要的程序。我嘗試過多種實現方式,並想知道是否有人知道一個例子或者是否有可能。以下是我所瞭解的程序。我將不勝感激任何幫助。用於創建過程的MySQL Shell腳本

的過程:

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 ; 

我試了一下:

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

其中$ createProc是代碼來創建程序。

回答

3

將您的程序存儲在文件procedure.sql中,請嘗試以下操作。它通過在命令行中指定數據庫來消除USE語句:

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

儘管不在.sql文件中的任何方式?自生成安裝程序包後,我無法訪問目錄。 – ars265 2011-04-25 19:47:37

+0

我懷疑你的問題是由於shell轉義'\\\'和';'造成的。如果您將字符串中的所有字符都轉義出來,則將其作爲帶'-e'的字符串調用可能會起作用。但不知道。 – 2011-04-25 20:03:09

+0

實際上,我發現了一種編輯安裝程序包來保存.sql文件的方法,以便您的解決方案運行良好。感謝您的幫助。 – ars265 2011-04-25 22:18:26