sql >> データベース >  >> RDS >> Mysql

PDOを使用してPHPでDELIMITERを含むストアドプロシージャを作成するにはどうすればよいですか?

    コメントから:

    それはそれがどのように機能するかではありません。

    理由を理解するには、mysqlがどのように機能するかを理解する必要があります CLI(およびこのようなダンプファイルを読み取って実行できるその他のプログラム)は、実際にそれを処理します。

    DELIMITER サーバーが理解できるものではありません。

    DELIMITER クライアント側パーサーに通知するために使用されます クライアント側のパーサーがステートメントを正しく分割し、実行のためにサーバーに一度に1つずつ配信できるように、現在のステートメント区切り文字をどのようにする必要がありますか。

    ドキュメントから。 mysqlに注意してください 、ここで使用されるたびに、mysqlを参照します クライアントユーティリティ -サーバーではありません。

    したがって、このようなファイルを処理するには、同じことを行うクライアント側のパーサーが必要ですmysql します...そしてここで、あなたが書いているコードはです (必要)クライアント側のステートメントパーサー。したがって、区切り文字を処理するロジックを作成する必要があるのはあなたです。

    やりたいことをするためには、DELIMITERを解釈する必要があります ステートメントは、現在のステートメント区切り文字を追跡するために使用しますが、サーバーには送信しないでください。

    次に、入力を一度に1行ずつ読み取り、読み取った内容をバッファリングして、行の終わりに指定された区切り文字が見つかるまで、結果のステートメントをサーバーに送信する必要があります- except < 送信するものからの実際のステートメント区切り文字...したがって、たとえば、末尾の$$は送信しません。 プロシージャ本体の後(現在のステートメント区切り文字が;でない場合) 、送信することも送信しないこともできます。サーバーは関係ありません。)次に、バッファーを空にして、区切り文字の別のインスタンスが表示されるまで(そして、ステートメントをサーバーに送信するまで)、またはDELIMITER ステートメントを作成し、コードの現在の区切り変数をそれに一致するように設定して、次のステートメントの終わりを正しく識別できるようにします。



    1. SQL ServerManagementStudioの使用方法について学ぶ

    2. MariaDBのINSTR()とLOCATE()の違い

    3. MySQLの2つの日付間の年の差を整数として取得します

    4. MySQL-検索されたキーワードを囲む単語を検索する