ALTER PROCEDURE dbo.CurePeriod
@curDate_p1 datetime
-- call
exec CurePeriod @curDateTrick
ストアドプロシージャで自分自身を呼び出すことはできますか? その権利はありますか?多くのありがとう。ストアドプロシージャ自体を呼び出す
ALTER PROCEDURE dbo.CurePeriod
@curDate_p1 datetime
-- call
exec CurePeriod @curDateTrick
ストアドプロシージャで自分自身を呼び出すことはできますか? その権利はありますか?多くのありがとう。ストアドプロシージャ自体を呼び出す
再帰は多くのDBMSでサポートされており、原則としてその実装はあなたが書いたようなものです。
:
:
exec CurePeriod (@curDateTrick , 1) ;
:
:
:あなたのコード内のどこかに
CREATE PROCEDURE dbo.CurePeriod (@curDate_p1 datetime , @OtherParam INT)
AS
BEGIN
IF @OtherParam < 10 THEN
exec CurePeriod (@curDateTrick , @OtherParam + 1) ;
END IF ;
END ;
と:あなたは、次のようなものを持っている必要がありますので、あなたの例では
は、 終了条件は、再帰の無限の深さを避けるために必要です注:あなたの例はSQL Server用のようですので、あなたはいくつかの編集を行う必要があります。私はここに投稿しています。
(2)10回の呼び出し後に再帰を強制終了します。
ストアドプロシージャ自体を呼び出すときは非常に注意してください。無限の繰り返しは、procで何が行われているかによっていくつかの重大な問題を引き起こす可能性があります。
proc内の条件を使用して、これが実行される回数が確実に実行されるようにするには、この回数だけ回避してください。
BEGIN
IF @TEST = 'VALUE'
EXEC PROCNAME @PROCPARAM
ELSE
'SOMETHING ELSE'
END IF ;
あなたはこれを行うことができますが、何らかの形でどのように実行を中断するかを管理する必要があります。
あなたは、ストアドプロシージャを作成自体の中で述べた手順を実行し、それを実行した場合、それはちょうどあなたが
Maximum stored procedure, function, trigger, or view nesting level exceeded
エラーメッセージが表示されて満たされているそれまではinfinately実行されます。
99%のケースでは、より良い方法があります。むしろあなたが達成しようとしていることの質問を投稿し、あなたが試したことを示して、人々に望ましい結果を得るためのより良い方法を提案させてください。
あなたはそれを条件付きで呼び出す必要があります。それ以外の場合は無限大の時間に自分自身を呼び出します – Developerzzz
どのDBを使用していますか?あなたは何を達成したいですか?これは有効な呼び出しですが、無限ループに入ります。 – Ubercool
SQL Serverでは、再帰ストアドプロシージャを記述できます。最大ネストレベルは32です。['@@ NESTLEVEL'](https://msdn.microsoft.com/en-us/library/ms187371.aspx) –