4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

みなさまこんにちは、
本日はみなさまに向けてSQLの問題を出題させていただきます。
4択なので、答えを一つ選んでください。

前提環境

postgres:13
https://hub.docker.com/layers/library/postgres/13/images/sha256-f146d3f56382d538abf128322bbe060784fdc0586c369c6e70a0c40838b00f94?context=explore

問題

以下、4つのクエリの中から、関数hoge()が呼び出されないものを選んでください。
hoge()は以下、内容とする。

hoge.sql
-- 呼び出されたら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公式ドキュメントをご覧ください!

終わりに

また、時間があったらこれ系の問題作ります。

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?