PREPARATION
受験対策

Silverの例題解説
「S3.2 組み込み関数(時間関数)」

今回は、Silverの「S3 開発/SQL - S3.2 組み込み関数(時間関数)」からの出題です。

例題

3.102

現在時刻を返す関数 current_timestamp の select を以下のように連続して2回実行した。

select current_timestamp;
select current_timestamp;

このとき、2回とも同じ値が返った。考えられる理由として最も適切なものを選びなさい。

  1. サーバマシンのハードウェアクロックが故障している。
  2. サーバマシンで timed を実行していないため、時刻が正確に保たれていない。
  3. 2つのSELECT文を間を空けず、連続して素早く実行したため、同じ時刻が返った。
  4. これらのSELECTを実行する直前に BEGIN コマンドを実行していた。
  5. 同じセッション内から実行すれば、current_timestamp は必ず同じ値を返す。

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

解答と解説

current_timestamp
(「関数」ですが、カッコを付けずに使います)は現在時刻をマイクロ秒単位で返す関数ですが、トランザクション内ではトランザクションの開始時刻を返す、つまり同一のトランザクション内では常に同じ値を返す仕様になっています。マイクロ秒単位ですので、連続して素早く実行したからと言って、同じ値が返ることはありませんし、同一セッションでもトランザクションが別なら、異なる値が返ります。Dは直前にBEGINコマンドを実行することで、その後の2回のSELECTは1つのトランザクションの中で実行されています。

従って正解はDです。

PostgreSQL の拡張で transaction_timestamp()
という関数も用意されており、これはその名前が示唆する通りトランザクションの開始時刻を返しますが、current_timestamp
もこれと同じ意味になります。
やはりPostgreSQLの拡張ですが、トランザクション内で実際に個々のSQLが実行された時刻を取得したい場合のために、statement_timestamp()
および clock_timestamp() という関数も用意されています。それぞれ、SQL文が実行された時刻、SQL
内で関数が実際に実行された時刻、を返します。

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

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

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors