PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
8630 | 99/10/07 17:52:53 | RE(2):PB4.0.03: 2000年テストで発生した問題と対処(長文ご容赦) By どん |
8541 | 99/10/05 16:25:14 | RE(1):PB4.0.03: 2000年テストで発生した問題と対処(長文ご容赦) By Taka |
8523 | 99/10/05 11:55:23 | PB4.0.03: 2000年テストで発生した問題と対処(長文ご容赦) By どん |
カテゴリ:データベース
日付:1999年10月05日 11:55 発信者:どん
題名:PB4.0.03: 2000年テストで発生した問題と対処(長文ご容赦)
Y2Kの動作確認テストを行ったところ、データウィンドゥを使ってのDB更
新処理でDBエラー発生。SQLトレースで調査した。
これはPBが自動生成するUPDATEL文のTO_DATEでDBテーブル内の日付データが
1900年代の場合
TO_DATE(\'16-Aug-99 17:52:59\',\'DD-MON-YY HH24:MI:SS\')
2000年代の場合は
TO_DATE(\'4-Feb-2000 00:00:00\',\'DD-MON-YYYY HH24:MI:SS\')
と生成される。この1900年代の時の\'99\'と2桁で年が入った場合、oracle側は
世紀桁にシステム日を適用して解釈する為、更新をかけたいデータは1999年の
ものなのに、2099年で検索をかける形になりDBエラーとなってしまった。
対処法として
・oracleサーバー
NLS_DATE_FORMAT=YYYY/MM/DD HH24:MI:SS
・PB4のデータベースパラメータ
dbparm = datetime = \' \'\'\'\'YYYY/MM/DD HH:MM:SS\'\'\'\' \'
↑TO_DATEでデータ内容に関わらず全て上記フォーマットで生成してくれる
ようになる。
・WinNTクライアントの環境変数
NLS_DATE_FORMAT=YYYY/MM/DD HH24:MI:SS
(全て時分秒まで指定しておかないと駄目!)
・dbparmを変えた事による他PGMへの影響
DWのwhere句
to_char(\"TEST_T\".\"Y_DATE\",\'yyyymmdd\') = to_char(:Y_DATE,\'yyyymmdd\')
で、dbparm設定後では
to_char(\"TEST_T\",\"Y_DATE\",\'yyyy/mm/dd hh24:mi:ss\') =
to_char(\'2000/01/11 00:00:00\',\'yyyy/mm/dd hh24:mi:ss\')
で実行されて【ORA-01722:数値が無効です 】エラー。
dbparmを外すと
to_char(\"TEST_T\",\"Y_DATE\",\'yyyy/mm/dd hh24:mi:ss\') =
to_char(TO_DATE(\'11-Jan-2000 00:00:00\',\'DD-MON-YYYY HH24:MI:SS\'),
\'yyyy/mm/dd hh24:mi:ss\'))
dbparmのdatetime設定無し状態だとPBは自動でTO_DATEを付加する。
結局コードを直さなくちゃ行けない。PB4,Oracleの組み合わせでの2000年
対応は手間暇がかかると実感しています。
現在ここまで判明して対応中ですが、これ以外にも何かあるんでしょうか?
同じような事をやっている方おりましたら、他に発生する問題及びもっと
良い解決法(PB5にバージョンアップ?)を教えて頂けるとありがたいです。
期間的にもう余裕が無い・・・(^^;
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows NT 3.51
DBMS Oracle SQL*Net 2.1
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 7.2
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.