質問

MySQL管理者にストアドプロシージャを作成しようとしています。 Powweb.comでウェブサイトをホストしています。この目的のために、私はmysqladminにストアドプロシージャを作成しようとしています。

MySQLバージョンは5.0.45です。コードが1行しかないストアドプロシージャを作成できます。

CREATE PROCEDURE TEST(input INT)
    INSERT INTO TEST(COL1) VALUES(input);

しかし、これは役に立ちません。より多くのコマンドでストアドプロシージャを書きたいです。だから私は好きになろうとします

CREATE PROCEDURE TEST(input INT)
BEGIN
    INSERT INTO TEST(COL1) VALUES(input);
    INSERT INTO TEST1(COL1) VALUES(input);
    INSERT INTO TEST2(COL1) VALUES(input);
END

ただし、これにより構文エラーが発生します。しかし、同じコードが私のローカルマシンで正常に機能します。これを解決する方法について何か考えがある場合はお知らせください。助けやアドバイスは大歓迎です。

役に立ちましたか?

解決

デフォルトの区切り文字はです ;, 、したがって、コードを複数のクエリとして解釈しますが、これは明らかに機能しません。このようなことを試してみてください:

delimiter //
CREATE PROCEDURE TEST(input INT)
BEGIN
    INSERT INTO TEST(COL1) VALUES(input);
    INSERT INTO TEST1(COL1) VALUES(input);
    INSERT INTO TEST2(COL1) VALUES(input);
END//

他のヒント

phpmyadminを無視してください、それはオートバイアシュトレーと同じくらい役に立たない。シェルにログインして、MySQLコマンドラインインターフェイスを使用します。これは、MySQLをスクリプト化する唯一のサポート可能で正しい方法です。

DelimiterコマンドはMySQL Serverコマンドではなく、MySQLコマンドラインクライアントコマンドです。それを使用するには、適切なMySQLコマンドラインクライアントを使用する必要があります。

それ以外の場合は、保存されたProcを作成することは(不可能ではありませんが)困難です。

phpMyAdminでは、SQLエディターでは、「Delimiter」というラベルのあるフォームフィールドにデリミッターを設定できます。デフォルトです。あなたが好きなものに設定し、SQLにDelimiter //を入力しないでください。

最良の答えは、 @Barryのコメントです:

でストアドプロシージャ 複数のクエリ いつ正常に動作します 開始をパット..終了 ブロック その周りに。 - バリー・ステイズ

プラス、 パッティング ; 各クエリの終わりに.

例:

BEGIN
    INSERT INTO passenger (fname,lname,tel,ID,sex)
    VALUES (fname,lname,tel,ID, sex);
    INSERT INTO passenger 
    select * from reservation where 1;
END

mysql管理者はです 時代遅れ. 。使ってください mysqlワークベンチ より多くの機能性と 金持ちのgui ベースの操作。https://www.mysql.com/products/workbench/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top