web-dev-qa-db-ja.com

ストアドプロシージャとトリガーのSQLの違い

ストアドプロシージャとSQLのトリガーの違いを理解できません。誰かがそれを説明してくれるほど親切なら、それは素晴らしいことです。

前もって感謝します

33
Dynamiite

ストアドプロシージャは、ローカルバージョンのPL/SQLで記述されたユーザー定義のコードであり、明示的に呼び出すことで呼び出される値(関数にする)を返す場合があります。

トリガーは、さまざまなイベント(更新、挿入、削除など)が発生したときに自動的に実行されるストアドプロシージャです。

IMHOストアドプロシージャは 絶対に必要な場合を除いて回避する です。

36
Bohemian

ストアドプロシージャは、オブジェクト指向プログラミング言語のメソッドのようなものだと考えてください。いくつかのパラメータを渡すと動作し、何かを返すことができます。

トリガーは、オブジェクト指向プログラミング言語のイベントハンドラーに似ています。特定の条件が発生すると、(a)イベント自体を処理するか、(b)何らかの処理を実行してイベントがバブルアップし続けることができます。

30
mgw854

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コードを実行するだけです。ストアドプロシージャ。

  • ストアドプロシージャで多くのプログラミングを行い、何度も実行できます。
  • 入力プロセスを取得して出力を行うプロシージャを作成できます
  • Try catchを使用してエラーを処理できます
  • ストアドプロシージャはネストでき、ネストされた呼び出しで何度も呼び出すことができます
  • より安全です

次のようなストアドプロシージャを作成できます。

CREATE PROCEDURE dbo.Sample_Procedure 
    @param1 int = 0,
    @param2 int  
AS
    SELECT @param1,@param2 
    RETURN 0;

両方の違い

  • ストアドプロシージャを手動で呼び出すことができる場合、トリガーを手動で呼び出すことはできません。

  • トリガーはイベントが発生すると自動的に実行され、データベースからテーブルとデータを削除またはドロップすることからのレポートおよびデータ保護に使用できます。トリガーから防ぐことができます。一方、ストアドプロシージャは誰かが呼び出す必要があります。

  • ストアドプロシージャはフロントエンド(クライアントアプリケーション)から呼び出すことができますが、クライアントアプリケーションからトリガーを呼び出すことはできません。

トリガーとプロシージャのいくつかの違い:

  1. Execコマンドを使用して、必要なときにいつでもストアドプロシージャを実行できますが、トリガーは、トリガーが定義されているテーブルでイベント(挿入、削除、更新)が発生する場合にのみ実行できます。
  2. ストアドプロシージャは入力パラメーターを取ることができますが、トリガーへの入力としてパラメーターを渡すことはできません。
  3. ストアドプロシージャは値を返すことができますが、トリガーは値を返すことができません。
  4. ストアドプロシージャ内では、トランザクションの開始、トランザクションのコミット、ロールバックなどのトランザクションステートメントを使用できますが、トリガー内ではトランザクションステートメントを使用できません
  5. フロントエンド(.aspファイル、.aspxファイル、.ascxファイルなど)からストアドプロシージャを呼び出すことはできますが、これらのファイルからトリガーを呼び出すことはできません。
6
Aboli Ogale

トリガーは、挿入、更新、または削除の後に起動します。ストアドプロシージャは、呼び出し時に実行されるサーバー側プログラムです。

4
Tim

ストアドプロシージャは、一度コンパイルされた後、何度も実行できるSQLステートメントのグループです。トリガーは、トリガーイベントが発生したときに暗黙的に起動される名前付きデータベースオブジェクトです。トリガーアクションは、トリガーイベントの前または後に実行できます。トリガーはストアドプロシージャに似ていますが、呼び出される方法が異なります。トリガーはユーザーによって直接呼び出されるのではなく、ストアドプロシージャはユーザーによって直接呼び出されます。

1
Deepu

ストアドプロシージャは、DBMSに存在し実行されるコードの一部であり、クライアントまたは他のストアドプロシージャによって明示的に呼び出すことができます。通常、OracleのPL/SQLやMS SQL ServerのT-SQLなど、SQLの手続き型拡張で記述されますが、一部のDBMSはJavaまたは.NET asなどのより一般的な言語をサポートしますまあ。

トリガーは、明示的に呼び出すことができない(一種の)ストアドプロシージャであり、代わりに、挿入、更新、削除、テーブル内の行などのイベントに応じて自動的に実行されます。

1

ストアドプロシージャは、別のストアドプロシージャから呼び出すことができますが、abトリガーから呼び出すことはできません。ストアドプロシージャは、ユーザーが必要なときにいつでも実行できますが、トリガーはできません。トリガーは、イベントが発生したときにのみ起動されます。ストアドプロシージャには、printステートメント、複数のパラメーター、および戻り値を設定できますが、トリガーは設定できません。ストアドプロシージャはフロントエンドから呼び出すことができますが、トリガーはできません。

1
Sayani
                    ***TRIGGERS*** 
  1. 特定の時間にアクション。

  2. トリガーは、ユーザーが直接呼び出すことのない特別な種類のストアドプロシージャです。

  3. トリガーが作成されると、特定のタイプのデータ変更が特定のテーブルまたは列に対して行われたときに起動するように定義されます
1
user3613136

トリガーは、特別な種類のストアドプロシージャです。テーブルにアタッチされ、挿入、更新、または削除が発生したときにのみトリガーされます。ストアドプロシージャは、テーブルで作成して再利用できる重要な機能です。

1
sql learner

JavaScriptに精通している場合、triggeraddEventListenerおよびStored Procedurecallbackです。

0
Vighnesh Raut

両方とも、ビジネスロジックの実装に使用できるコードのブロックを含むデータベースオブジェクトです。

違いは次のとおりです。

1)Triggersは自動的に起動しますが、そのためのイベントが必要です。 (例:createalterdropinsertdeleteupdate)。

2)プロシージャを明示的に呼び出してから実行する必要があります。 createalterdropinsertdeleteupdateは必要ありません。また、sp_procoptionを使用してプロシージャを自動的に実行することもできます。

3)triggers内にパラメーターを渡すことはできません。

しかし、ストアドプロシージャ内でパラメーターを渡すことができます

例:メッセージ「エラー」を表示したい場合

トリガーを使用する:DDL/DMLプロシージャを使用したステートメント:NO DDL/DMLが必要です

0

ストアドプロシージャとトリガーの違い

トリガーをストアドプロシージャのようなデータベースオブジェクトとして定義することも、データベースでイベントが発生したときに起動する特別な種類のストアドプロシージャであると言うこともできます。イベントが発生したときにデータベースで「何かをする」SQLクエリを実行できます。

    Triggers are fired implicitly while stored procedures are fired explicitly.
0
JIYAUL MUSTAPHA