MySQLストアドプロシージャ
-
08-07-2019 - |
質問
私はMS SQL Serverのバックグラウンドから来ています。 MySQLとNaviCat 8管理ツールを使用して新しいプロジェクトに取り組んでいます。 はい、質問です。 通常、MSランドで作業しているときにデータを更新する場合は、ストアドプロシージャを使用してこれを実行します。
Drop Procedure spNew
Create Procedure spNew (@P_Param)
UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param
NaviCat内からこの同じロジックを実行しようとしています。
パラメーター(IN '@P_Param' int)
配置した定義:
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param
END;
ストアドプロシージャを保存しようとすると、次のエラーが表示されます。 " 1064-SQL構文にエラーがあります。何とか、何とか、何とか
誰かが少なくとも私を正しい方向に向けることができますか?
ありがとう。
解決
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param;
END;
MySQL
の構文と全体的なイデオロギーは、 SQL Server
の非常にとは異なります。
区切り文字の設定も必要になる場合があります:
DELIMITER $
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param;
END;
$
DELIMITER ;
ところで、予約語なので、実際にはテーブル" Table"
を呼び出さないと仮定しています。
行う場合は、次のようにバックティックで囲む必要があります。
DELIMITER $
CREATE PROCEDURE spNew(P_Param INT)
BEGIN
UPDATE `Table`
SET `Field` = 'some value'
WHERE `ID` = P_Param;
END;
$
DELIMITER ;
他のヒント
MySQLストアドプロシージャのパラメータには、宣言内または使用時に@の接頭辞や引用符が付きません。ただし、ローカル変数の先頭には@が付きます。
試してください:
DROP PROCEDURE IF EXISTS spNew;
CREATE PROCEDURE spNew(IN P_Param INT)
BEGIN
UPDATE Table
SET Field = 'some value'
WHERE ID = P_Param
END;
所属していません StackOverflow