PREPARATION
受験対策

Silverの例題解説
「S3.1 SQL コマンド(関数定義、プロシージャ定義)」

今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(関数定義、プロシージャ定義)」からの出題です。

例題

3.115

CREATE FUNCTION func_add(x integer, y integer) RETURNS integer AS $$
SELECT x + y;
$$ LANGUAGE SQL;

上記について適切な説明を3つ選びなさい。

  1. PL/pgSQL を使って関数を定義している。
  2. func_add という関数を定義している。

  3. SELECT func_add(2, 3) を実行すると 5 が返される。
  4. 1行目の終わりと3行目の先頭の $$ の代わりに、’ (シングルクォート)を使っても良い。
  5. CREATE FUNCTIONの実行には、データベースの管理者権限が必要である。

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2020年5月27日

解答と解説

PostgreSQL ではユーザが関数を定義することが可能で、SQLや、SQLに手続き言語の機能を付加した PL/pgSQL などだけでなく、CやPythonなどの手続き言語で関数を作ることもできます。
例題では、CREATE FUNCTIONで、func_add という integer 型の関数を定義しています。
関数の本体は2つの $$ に囲まれた SELECT x + y; という部分だけで、定義の終わりにも LANGUAGE SQL とある通り、SQL を使って定義しています。PL/pgSQL を使う場合は、最後が LANGUAGE plpgsql となります。
関数に渡された引数は、例題の x と y のように名前で参照することもできれば、例えば CREATE FUNCTION func_x(integer, integer) のような引数を型だけで定義し、$1, $2 のように番号で参照することもできます。
SQLで定義した関数は、最後に実行される SQL の結果がそのまま関数の結果として返されるので、func_add(2, 3) なら SELECT 2 + 3 の結果、すなわち5が返されます。
PostgreSQLの関数定義では、関数の本体部分は文字列として指定します。標準SQLでは文字列をシングルクォートで括りますが、PostgreSQLでは、例題にあるように $$ をシングルクォートの代わりに使うことができます。文字列中にシングルクォートを使うとき、それをシングルクォートで括るためには、’It isn’’t easy’ のようにシングルクォートを重ねる必要があってわかりにくくなりますが、$$を使えば、$$It is’t easy$$のように記述できるので、特に関数定義の場合には便利です。例題では、関数定義の本体にシングルクォートなど特別な注意が必要な文字がないので、2つの $$ をシングルクォートに置き換えることが可能です。
CREATE FUNCTIONによる関数の定義には特別な権限は必要なく、どのユーザでも実行できます。


したがって正解はB、C、Dです。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システム、AIなどの
新領域での「PostgreSQL」の採用が拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定です

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。