今回は、Silverの「S3 開発/SQL - S3.2 組み込み関数(時間関数)」からの出題です。
※この例題は実際の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事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.