はじめに
みなさまこんにちは、
本日はみなさまに向けてSQLの問題を出題させていただきます。
4択なので、答えを一つ選んでください。
前提環境
問題
以下、4つのクエリの中から、関数hoge()が呼び出されないものを選んでください。
hoge()は以下、内容とする。
-- 呼び出されたらtrueを返すだけ
CREATE OR REPLACE Function hoge() RETURNS boolean
AS $$
DECLARE
flag boolean;
BEGIN
flag := TRUE;
RETURN flag;
END;
$$
LANGUAGE plpgsql;
選択肢
A. select hoge();
B. select TRUE OR hoge();
C. select FALSE OR hoge();
D. select TRUE AND hoge();
答え
B
解説
これはPostgreSQLの評価規則によるもので、具体的には式の一部を評価しただけで式の結果を決定できる場合には、他の副式がまったく評価されないことがあります。
選択肢Bのクエリでは、TRUE OR hoge();
という式があります。この式では、TRUE OR
の部分が既にTRUE
を返すため、その後のhoge()
関数は評価されない可能性があります。これは、一部のプログラミング言語に見られる「短絡評価」の一種とも言えますが、PostgreSQLでは必ずしも左から右に評価されるわけではないです。
したがって、この問題の条件「関数hoge()が呼び出されないものを選ぶ」に適合するのは選択肢Bとなります。
詳細はこちらのPostgreSQL公式ドキュメントをご覧ください!
終わりに
また、時間があったらこれ系の問題作ります。