5

Symfony2 でアプリケーション プロジェクトを作成しています。登録により、クライアントごとにデータベースが作成されます。スキーマは、クライアントのログオン時に検証サービスによって作成されます。アプリケーションが機能するにはデータが必要なので、これまでは ORM フィクスチャを使用していました。いくつかの理由から、フィクスチャのロードからデータベースに近づく必要があります。すべてのデータ読み込みを置き換えるストアド プロシージャ (mysql) を作成しました。手順は機能しますが、スキーマと共に各データベースにこの手順を作成する必要があります。この目的で doctrine raw sql を使用していますが、 create procedure ステートメントの最初の行で問題を解決できません。「区切り記号$$」に関係しているようです。

SQLステートメントでサービスを実行しているときに、「メッセージ」:「「デリミタ$$\r\n\r\nCREATE DEFINER = root@`localhost」の実行中に例外が発生しました」

改行が原因のようですが、よくわかりません。誰でもこれを回避する方法を知っていますか?

4

3 に答える 3

8

問題は、 http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.htmlで説明されているように、MySQL コマンドライン ツールを使用する場合にのみ区切り文字コマンドを使用できるという事実に起因します。この問題を解決するには、区切り文字を変更している部分を削除して、 ; を使用する必要があります。区切り文字として。次の点を考慮してください。

delimiter $$

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
   SET @x = 0;
   REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END$$

上記は機能しませんが、以下は機能します。

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
    SET @x = 0;
    REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
于 2014-01-03T18:41:35.643 に答える
0

これは遅い回答であることは承知していますが、この投稿は Google の結果で上位にあり、他に回答が見つからなかったので、問題を解決する方法を投稿したいと思います。

簡単に言うと、クエリ内で \n 文字を使用して行を分割する必要があります。たとえば、次のようになります。

$this->addSql(
    "CREATE EVENT event_example ON SCHEDULE EVERY 15 MINUTE ".
    "ON COMPLETION NOT PRESERVE ENABLE DO BEGIN\n".
    "INSERT INTO archives SELECT * FROM records;\n".
    "DELETE FROM records;\n".
    "END"
);
于 2017-11-15T12:58:38.123 に答える