エキサイトホールディングス Advent Calendar 2021 の14日目は、エキサイト株式会社の大澤 が担当させていただきます。
やりたいこと
SELECT :date FROM dual;
このとき :date
に対して 2021-12-07 15:01:00
の日付型をbindして実行したい
解決方法
SELECT :date FROM dual;
:date
に timestamp '2021-12-07 15:01:00'
を bind して実行する
詳細
弊社では 一部で Oracle の DB を利用しています。 また、 Named parameters な ORM を採用しているため、 生 SQL を取得する場合は上記のようなクエリが取れます。
このときに DatetimeImmutable 型を バインドしている日付型については、 DBeaver (GUI な DB viewer) で うまくバインドできないと思っていました。
なので下記のように to_date
でクエリをいちいち書き換えていましたが面倒でした。
SELECT to_date(:date, 'yyyy-mm-dd hh24:mi:ss') FROM dual;
操作していてたまたま timestamp '2021-12-07 15:01:00'
と書くことで用が済むことを発見したためここに記します。
応用使用例 (フラッシュバックを複数同時検索)
with timestamp_all as ( select :timestamp1 as "タイムスタンプ", x_pk, x_changed_column from XXXXXX as of timestamp (:timestamp1) UNION ALL select :timestamp2 as "タイムスタンプ", x_pk, x_changed_column from XXXXXX as of timestamp (:timestamp2) UNION ALL select :timestamp3 as "タイムスタンプ", x_pk, x_changed_column from XXXXXX as of timestamp (:timestamp3) ) select * from timestamp_all;