好きなおでんの具材ドラフト会議しましょう

SQL Server 2000のTransact-SQLで、ストアードプロシージャ
あるいは関数内でのみ有効なモジュール(OracleのPL/SQL
で言うところのサブプログラム)は作れますか?
もし可能なら、その方法をご教授下さい。
よろしくお願いします。

A 回答 (2件)

#1です。


できませんだけだと何なので、きわめて限定的ですが、Transact-SQLの一時ストアドプロシージャを使う例を参考までに示します。
ローカルサブプログラムは作れないので、ストアド内で一時ストアドプロシージャを作って完了後にドロップします。
CREATE PROCEDURE sp_test
AS
BEGIN
SET NOCOUNT ON
DECLARE @sql varchar(8000)
SET @sql = 'CREATE PROCEDURE #wkFunc (@P varchar(20))'
+' AS BEGIN SET NOCOUNT ON SELECT @P+@P END'
EXEC (@sql)

EXEC #wkFunc 'A'

SET @sql = 'DROP PROCEDURE #wkFunc'
EXEC (@sql)
END

・ストアドのみ可能です(関数はできません)
・本体のストアドプロシージャはコンパイル時に一時ストアドプロシージャがないといけないので、先に作成してからコンパイルします。
・一時ストアドプロシージャはセッション内でのみ有効なオブジェクトで、セッションが切れたら消えますが、念のためDROPしています。

まあ、これが限界かと。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
やっぱり、ローカルなサブプログラムは作れないのですね。
どうしても子のストアードプロシージャを残したくなければ、
動的に作成して消すしかないのですね。
作成するストアードプロシージャが増えてきたら検討することに
します。

お礼日時:2008/11/03 19:31

Transact-SQLのオブジェクトにはスコープの概念がありませんので、PL/SQLのローカルサブプログラムのようなものは作れません。


ちなみにSQL Server2005/2008でもできません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A