今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(関数定義、プロシージャ定義)」からの出題です。
func_add という関数を定義している。
※この例題は実際の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事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.