mysqladminにストアドプロシージャを作成しますか?
-
19-09-2019 - |
質問
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/