質問

私は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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top