環境
- DBMS = SQL Server 2005ぐらい
ストアドプロシージャの戻り値
- どうやら、ストアドプロシージャ(PROCEDURE)は戻り値として、数値しか返却できない。
- いろいろなデータ型を返却したいときにはストアドファンクション(FUNCTION)を使うようだ。
- ちょっと練習してみる。
ストアドファンクション作成
CREATE FUNCTION testfunc
( @str nvarchar(max)
, @len int = 3
)
RETURNS nvarchar(max)
AS
BEGIN
RETURN LEFT(@str,@len);
END;
第2引数を省略して実行
select dbo.testfunc('ABCDEFG')
メッセージ 313、レベル 16、状態 2、行 1
プロシージャまたは関数 dbo.testfunc に指定された引数が不足しています。
- えぇ?エラー?なぜ?ちゃんと @lenにdefault値を指定しているのに…
- ググるとストアドファンクションソースはいくつもヒットするが、default値指定しているfunctionが見当たらない…
- 途方に暮れ、Books Onlineと同じだよなーと思いつつ、当然のようにヒットしているMSDNを読む。
[ = default ]
パラメータの既定値です。default 値が定義されている場合は、パラメータに値を指定せずに関数を実行できます。
- そうだよね。できるはず。でも省略したらエラーになるんです。
関数のパラメータに既定値がある場合に、既定値を取得する目的でその関数を呼び出すときは、
DEFAULT キーワードを指定する必要があります。この動作は、ストアド プロシージャで既定値
を持つパラメータを使用する場合とは異なります。ストアド プロシージャの場合は、パラメータ
を省略すると既定値が暗黙的に使用されます。
select dbo.testfunc('ABCDEFG', DEFAULT)
---------------------------------------
ABC
(1 行処理されました)
- できました。なぜPROCEDUREと同じじゃないんでしょう…まさかオーバーロードできる…わけないですね。