助け合いフォーラム
この問題はプレミアムコンテンツです。
oss-db silver 問題ID 12286について
CREATE OR REPLACE FUNCTION sample_func(TEXT) RETURNS SETOF INTEGER AS $$
SELECT id FROM sample WHERE staff = $1 ORDER BY id LIMIT 2;
$$ LANGUAGE SQL STRICT;
関数の処理はPL/pgSQLで定義されている
このFUNCTION作成に対して、「パラメータの値が同じであれば、何回実行しても関数が返す値は変わらない」
という回答が正しくない理由がわかりません。解説では
「・パラメータの値が同じであれば、何回実行しても関数が返す値は変わらない
関数を実行するテーブルに対してデータ変更があると、返される値が変わる場合もあります。詳しくは実行例をご確認ください。」
とありますが、こんな前提があるのであればどんな問題も覆ると思うのですが。
関数が返す値は変わらない
ってことなので、CREATE OR REPLACE FUNCTION sample_func(TEXT) ...
の文の実行についての話ではなく、作成された関数を実行( SELECT sample_func()
)した際の話ではないでしょうか?
実行例を見てくださいってことですが、sample_func()
のパラメータに同じ「佐藤」を渡して実行した時に、データの状態によっては返ってくる値って変わりますよね。WHERE句の条件が同じでもSELECT文実行時のテーブル状態が変われば異なる値になるのは当然かと。
逆に言えば、この関数は「いちいちSELECT文全体を入力しなくても、渡した引数をWHERE staff=
にセットして実行してくれる」関数を作ったと言えるかなと。たとえば「日付」を渡したら指定した日付の売り上げを集計して返してくれる関数作ったとして、日付を「今日」にして実行したら開店直後と閉店間際では同じ日付を指定してるのに返ってくる値って変わりますよね。そういう意味じゃないですかね?
コメント
この投稿に対して返信しませんか?
y yami777
2023/06/11 22:55
追記 「どのタイミングで何回実行しても」とあるのであれば、納得しますが この作成時点で何回実行しても変わらないと思うのですが…