OSS-DB Silver 取得に向けて勉強中です。
『OSS教科書 OSS-DB Silver ver.2.0対応(翔泳社)』(緑本)と
『徹底攻略OSS-DB Silver 問題集 ver2.0対応(インプレス)』(黒本)
に取り組んでいます。
問題集で間違えたポイント、あやふやな点を教科書で補いつつ進めているのですが、
「問題集には出てくるが、教科書には出てこない」事項があったので、復習用にメモしておきます。
(単に見落としていただけかもしれないけれど)
尚、公式ドキュメントはOSSDBの出題範囲である「PostgreSQL 11」のものを参照しました。
(英)https://www.postgresql.org/docs/11/index.html
(日)https://www.postgresql.jp/document/11/html/
INHERITS(継承)
問題集p69(4章 SQL)問27
公式ドキュメント :
https://www.postgresql.org/docs/11/tutorial-inheritance.html
(2022/4/13追記:
Pingにも出てきた。(問題ID : 12270)Onenoteに詳細メモ)
SQL99
問題集p99 (4章 SQL)問33の解説
いきなり
SQL99の結合に関する問題です。
って出てきた。99って何?
→SQLには版があるようだ。国際標準SQL言語の国際規格制定年度に基づいて版名が付けられている模様。
1999~2000年度に制定されたのがSQL99。
その前の版はSQL92。
問題集に出てきたということは、SQL99が最新版なのかな?「SQL:2016」というのも見かけた。
大きな節目になったのがSQL92とSQL99だという情報もある。
詳細については今は深追いせず、
・SQLには版がある
・SQL99はメジャーな版
だということだけ覚えておこう。
カーソルのクローズって何?
問題集p80 (4章 SQL)問43
問題文
カーソルのクローズに関する説明として適切でないものを選びなさい。
→カーソルって何?クローズって何?初耳。教科書を見てみるも、何の記載も無い。
→ https://www.youtube.com/watch?v=zic2Tbd0ZHA
→https://atmarkit.itmedia.co.jp/ait/articles/1703/01/news193.html
→つまり、例えばUPDATEしたい行が3種類あったとして・・・
通常は・・・「WHERE句でどの行かを指定してUPDATEする(3種それぞれについて行なう)」必要がある。
カーソルを使うと・・・「最初に3種それぞれの条件とUPDATEしたい内容」を変数として定義しておく。カーソルを実行することでループ処理で1行ずつ条件を判定し、条件に応じてデータを自動で更新することができる。
・・・ということかな?ただ、この変数(「条件」と「UPDATEしたい内容」)の指定方法がいまいちよくわからない。
(2022/4月メモ:→カーソルについて、Ping-tで出てきた!解説Onenoteに記録した。)
EXECUTE・USING
黒本6章問12・13・15で出てきた。
緑本p238 8章SQLとオブジェクト トリガの作成 で
書式の中にさらっと「EXECUTE」が出てくるも、USINGは見当たらなかった。
EXECUTEも詳しい説明は無し。
%type , %rowtypeとは?
黒本10章(総仕上げ問題)問32
公式ドキュメント:43.3.3. 型のコピー・43.3.4. 行型
◆%type◆
データ型の変数を宣言。
参照される項目のデータ型が将来変更された場合でも、関数定義を変更する必要をなくすことができる!!
◆%rowtype◆
複合型の変数を宣言。
(複合型の変数=行変数(または行型変数))
table_name%ROWTYPEという記法を使用して、既存のテーブルやビューの行と同じ型を持つ行変数を宣言することができる。
もしくは、複合型の名前を付与して宣言することができる。
◆例(%type)◆
例えば、usersテーブルにuser_idという列があるものとします。 users.user_idと同じデータ型の変数を宣言するには、以下のように記述します。
user_id users.user_id%TYPE;
%TYPEを使用することで、参照する構造のデータ型を把握する必要がなくなります。 また、これが最も重要なことですが、参照される項目のデータ型が将来変更された(例えば、user_idのテーブル定義をintegerからrealに変更した)場合でも、関数定義を変更する必要をなくすことができます。
(引用元:PostgreSQL 11.5文書 第43章 PL/pgSQL - SQL手続き言語 43.3. 宣言 43.3.3. 型のコピー )
STRICT
黒本p227 (10章 総仕上げ問題)問34で
いきなりSTRICT
って出てきた。
問題(p227):
CREATE FUNCTION myfune(INTEGER) RETURNS text
LANGUAGE plpgsql STRICT AS '
(後略)
解説(p250):
(前略)引数にNULLが渡されたときの動作としてSTRICTが設定されているため、中のコードは実行されずNULLが戻されます。
STRICTって何?
公式ドキュメント :
https://www.postgresql.jp/docs/9.2/sql-createfunction.html
↓
CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT
CALLED ON NULL INPUT(デフォルト)を指定すると、引数にNULLが含まれていても、関数が通常通り呼び出されます。
その場合は、必要に応じてNULL値を確認し、適切な対応をすることは関数作成者の責任です。
RETURNS NULL ON NULL INPUTもしくはSTRICTを指定すると、関数の引数にNULLがある場合、常にNULLを返します。
このパラメータが指定されると、NULL引数がある場合、関数は実行されません。 代わりに、NULLという結果が自動的に与えられます。
「STRICTを指定すると、関数の引数にNULLがある場合、常にNULLを返します」
CASE
Ping-t(問題ID : 11980)でCASEが出てきたので緑本を引いたが、掲載されておらず。
黒本(p152 6章関数)には1問出題されていた。構文も記載されていた。
条件分岐の記述ができる関数。
【構文】[]内は省略可能
CASE [カラム名] WHEN 条件式 THEN 結果
[WHEN...]
[ELSE 結果]
END
追記記録
・(2022.03.03)STRICT
・(2022.4.13)CASE