0

データベースをその場で作成およびセットアップするデータベースセットアップスクリプトを作成しています。私が使用する mysql ユーザーには、ストアド プロシージャを作成するための完全な特権があります。データベース サーバーはアプリケーション サーバーとは異なります。

ユーザー、データベース、データベースの選択、テーブルの作成、テーブルへのデータの挿入、ビューの作成などを行うことができます.しかし、ストアドプロシージャを作成すると、問題に直面しています.

手順を作成するためのSQLに従う

CREATE DEFINER=`newuser`@`192.168.0.10` PROCEDURE `AppCounts_Stagewise_Monthly_Weekly` (IN FILTERTYPE INTEGER)
BEGIN
IF(FILTERTYPE = 0) THEN
SELECT base_user_id, stage, COUNT(vw_application.id) AS app_counts, WEEK(DATE) AS `week`, YEAR(DATE) AS `year`
    FROM vw_application 
    WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= DATE(DATE) 
    AND DATE(DATE) <= CURDATE() GROUP BY vw_application.stage, base_user_id;
ELSE    
    SELECT base_user_id, stage, COUNT(vw_application.id) AS app_counts, MONTH(DATE) AS `month`, YEAR(DATE) AS `year`
    FROM vw_application 
    WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= DATE(DATE) AND DATE(DATE) <= CURDATE() GROUP BY vw_application.stage, base_user_id;
END IF; 
END;

上記create procedureのような s SQL は、特別なセパレーターで区切られてファイルに入れられます。ファイルを開き、各 create スクリプトをセパレーターで展開して、配列内の各 create ステートメントを取得し、zend db アダプターを使用してそれらを実行します。

$data = file_get_contents($this->_specimenDbFiles['ROUTINES']);
$data = explode('--', $data);

foreach($data as $key => $value) {
    $clientDbAdaptor->query($value); 
}
4

1 に答える 1

2

私はこれを機能させることができました。

基本的に私がしたことは、データベースサーバーで次のように実行され、エラーが解決されました。

mysql_upgrade -u root -p 
于 2013-03-13T09:46:13.207 に答える