ストアドプロシージャとSQLのトリガーの違いを理解できません。誰かがそれを説明してくれるほど親切なら、それは素晴らしいことです。
前もって感謝します
ストアドプロシージャは、ローカルバージョンのPL/SQLで記述されたユーザー定義のコードであり、明示的に呼び出すことで呼び出される値(関数にする)を返す場合があります。
トリガーは、さまざまなイベント(更新、挿入、削除など)が発生したときに自動的に実行されるストアドプロシージャです。
IMHOストアドプロシージャは 絶対に必要な場合を除いて回避する です。
ストアドプロシージャは、オブジェクト指向プログラミング言語のメソッドのようなものだと考えてください。いくつかのパラメータを渡すと動作し、何かを返すことができます。
トリガーは、オブジェクト指向プログラミング言語のイベントハンドラーに似ています。特定の条件が発生すると、(a)イベント自体を処理するか、(b)何らかの処理を実行してイベントがバブルアップし続けることができます。
SQL Serverのトリガーに関して:トリガーは、データベースサーバーでイベントが発生したときに自動的に実行される特別なコードです。
ユーザーがデータ操作言語(DML)イベントを介してデータを変更しようとすると、DMLトリガーが実行されます。 DMLイベントは、テーブルまたはビューに対するINSERT、UPDATE、またはDELETEステートメントです。これらのトリガーは、表の行が影響を受けるかどうかに関係なく、有効なイベントが発生すると起動します
次のようなトリガーを作成できます。
CREATE TRIGGER TriggerName
ON [dbo].[TableName]
FOR DELETE, INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
END
ストアドプロシージャは、保存した準備済みSQLコードに過ぎないため、コードを何度も再利用できます。したがって、クエリを何度も何度も記述する場合は、そのクエリをストアドプロシージャとして保存するたびに記述する必要はなく、ストアドプロシージャを呼び出して、一部として保存したSQLコードを実行するだけです。ストアドプロシージャ。
次のようなストアドプロシージャを作成できます。
CREATE PROCEDURE dbo.Sample_Procedure
@param1 int = 0,
@param2 int
AS
SELECT @param1,@param2
RETURN 0;
両方の違い
ストアドプロシージャを手動で呼び出すことができる場合、トリガーを手動で呼び出すことはできません。
トリガーはイベントが発生すると自動的に実行され、データベースからテーブルとデータを削除またはドロップすることからのレポートおよびデータ保護に使用できます。トリガーから防ぐことができます。一方、ストアドプロシージャは誰かが呼び出す必要があります。
ストアドプロシージャはフロントエンド(クライアントアプリケーション)から呼び出すことができますが、クライアントアプリケーションからトリガーを呼び出すことはできません。
トリガーとプロシージャのいくつかの違い:
トリガーは、挿入、更新、または削除の後に起動します。ストアドプロシージャは、呼び出し時に実行されるサーバー側プログラムです。
ストアドプロシージャは、一度コンパイルされた後、何度も実行できるSQLステートメントのグループです。トリガーは、トリガーイベントが発生したときに暗黙的に起動される名前付きデータベースオブジェクトです。トリガーアクションは、トリガーイベントの前または後に実行できます。トリガーはストアドプロシージャに似ていますが、呼び出される方法が異なります。トリガーはユーザーによって直接呼び出されるのではなく、ストアドプロシージャはユーザーによって直接呼び出されます。
ストアドプロシージャは、DBMSに存在し実行されるコードの一部であり、クライアントまたは他のストアドプロシージャによって明示的に呼び出すことができます。通常、OracleのPL/SQLやMS SQL ServerのT-SQLなど、SQLの手続き型拡張で記述されますが、一部のDBMSはJavaまたは.NET asなどのより一般的な言語をサポートしますまあ。
トリガーは、明示的に呼び出すことができない(一種の)ストアドプロシージャであり、代わりに、挿入、更新、削除、テーブル内の行などのイベントに応じて自動的に実行されます。
ストアドプロシージャは、別のストアドプロシージャから呼び出すことができますが、abトリガーから呼び出すことはできません。ストアドプロシージャは、ユーザーが必要なときにいつでも実行できますが、トリガーはできません。トリガーは、イベントが発生したときにのみ起動されます。ストアドプロシージャには、printステートメント、複数のパラメーター、および戻り値を設定できますが、トリガーは設定できません。ストアドプロシージャはフロントエンドから呼び出すことができますが、トリガーはできません。
***TRIGGERS***
特定の時間にアクション。
トリガーは、ユーザーが直接呼び出すことのない特別な種類のストアドプロシージャです。
トリガーは、特別な種類のストアドプロシージャです。テーブルにアタッチされ、挿入、更新、または削除が発生したときにのみトリガーされます。ストアドプロシージャは、テーブルで作成して再利用できる重要な機能です。
JavaScriptに精通している場合、trigger
はaddEventListener
およびStored Procedure
はcallback
です。
両方とも、ビジネスロジックの実装に使用できるコードのブロックを含むデータベースオブジェクトです。
違いは次のとおりです。
1)Triggers
は自動的に起動しますが、そのためのイベントが必要です。 (例:create
、alter
、drop
、insert
、delete
、update
)。
2)プロシージャを明示的に呼び出してから実行する必要があります。 create
、alter
、drop
、insert
、delete
、update
は必要ありません。また、sp_procoptionを使用してプロシージャを自動的に実行することもできます。
3)triggers
内にパラメーターを渡すことはできません。
例:メッセージ「エラー」を表示したい場合
トリガーを使用する:DDL/DML
プロシージャを使用したステートメント:NO DDL/DML
が必要です
ストアドプロシージャとトリガーの違い
トリガーをストアドプロシージャのようなデータベースオブジェクトとして定義することも、データベースでイベントが発生したときに起動する特別な種類のストアドプロシージャであると言うこともできます。イベントが発生したときにデータベースで「何かをする」SQLクエリを実行できます。
Triggers are fired implicitly while stored procedures are fired explicitly.