はじめに
PoCフェーズで現行環境の再現を行うためにSQLを抽出してみたのは良かったのですが、
まんまと落とし穴にはまってしまった出来事を備忘録を兼ねて書いてみます。
目次
1.出てくるワード
2.経緯
3.はまった罠
4.原因
5.解決方法
6.おわりに
7.参考ドキュメント
1.出てくるワード
今回の記事で出てくるワードについて
BO・・・SAP BusinessObjects ※1
BCP・・・Business Continuity Planの略で、日本語では「事業継続計画」
EOS・・・企業の製品やサービスの取り扱い期限に関する略語で、何かが終了する時期や日付を表したもの。「S」を何の略とするかにより、何の終了を意味するかが異なる。
End Of Support・・・「サポート終了」の意味で、製品についての問い合わせ受け付けや修理、交換などのサポートサービスの提供が打ち切られる期限を表す。
PoC・・・(Proof of Concept:概念実証)とは、新たなアイデアやコンセプトの実現可能性やそれによって得られる効果などについて検証すること
ユニバース・・・ビジネス用語とデータベースの専門用語との間の通訳を行う、BusinessObjectsで利用するオブジェクト
2.経緯
SAP BusinessObjectsがEOSに伴い、BCPの観点から他ツール+Oracleへの移行を検討。
そのためのPoCを今回行っていた際のできごと。
3.はまった罠
BOからSQLを抽出してOracleSQL Developerで再現しようとしたのですが、一旦見てみましょう。
substr(to_char('出納年月日'),7,4) || substr(to_char('出納年月日'),4,2) = '202210'
とあるSQLの一節を取ってきたのですが、
この一節は出納年月日カラムのデータを文字型に変えて、左から7番目開始4文字と左から4番目開始2文字をがっちゃんこして比較する。といった内容になります。
ここでおかしくね?って気づくべきでした汗 気づけませんでした。
お気づきになった方は流石です・・・。
4.原因
最初はBOとOracleSQL DeveloperでDATEの表示が違うから正しくソートできず件数がおかしい!
と思っていました。
というのも、BOではDATEの持ち方はDD-MM-YYYYに対し、
OracleSQL DeveloperではYYYY-MM-DDでした。
しかし、DATE型の表示はどちらもYY-MM-DD・・・?おかしい・・・
・・・待ってください?
BOではDATEの持ち方はDD-MM-YYYYに対し、
OracleSQL DeveloperではYYYY-MM-DDでした。?
"文字型変換を行ったことで年月がうまく取れなくなっている・・・?"
↑これが原因でした。
BO環境で文字型に変えると上記の構文で問題はないかもしれないですが、
OracleSQL Developerだと大変なことになるのは容易に想像できるでしょう・・・
(M-DDYYみたいなことになる)
5.解決方法
BeforeとAfterのSQLを書き出します。
substr(to_char('出納年月日'),7,4) || substr(to_char('出納年月日'),4,2) = '202210'
DATE型の状態で'YYYYMM'を取り出してから文字型にする処理に書き換えます。
to_char('出納年月日','YYYYMM')='202210'
無事、OracleSQL Developerで条件抽出することができました汗
6.おわりに
正直かなり焦りました。
"そのまま移行できるだろう!"
↑これ慢心ですからね、ほんとに気を付けましょう(マジ気を付けます)
PMに相談して一緒に探していただき、発見できました。
ありがとうございます・・・!
移行等を行うときは各環境の仕様を把握すること、
SQL文がちゃんと機能しているか確認する。
年末の教訓になりました。
7.参考ドキュメント
※1