Pro*COBOLのビルド環境をOracle12cに移行したんですが、以前のバージョンでは発生していなかった問題が非互換として発生したので、メモしておきます。
Oracle接続でORA-01017が発生する
以下のようなメッセージが表示されてデータベースに接続できませんでした。ORA-01017: ユーザー名/パスワードが無効です。
原因
12cより前のバージョンでは、パスワードの前後に付いている半角スペースは自動で削除されていました。Oracle Client 12c(12.1.0) 以降では、パスワードの先頭や末尾の空白文字はパスワードの一部として扱われるようになったそうです。
そのため、不要な空白がパスワードに付いたままとなってしまい、ORA-01017が発生してしまいます。
対処方法
Oracle12cから追加された新しいプリコンパイルオプション「trim_password」を指定することで回避できます。trim_password=yes
Pro*COBOLでデータベースの文字項目を更新すると不要なスペースが付く
例えば5桁のホスト変数(PICXデータ型)に「ABC」という文字を詰めて更新すると、以前のバージョンでは「ABC」で更新されますが、12cでは「ABC 」として更新されます。原因
8.0より前のリリースでは「PIC X」は「VARCHAR2型」でしたが、Pro*COBOL8.0から「PIC X」のホスト変数は「CHARF型」として扱われるようになったそうです。そのため、ホスト変数のバイト数より短いデータを格納した場合には、足りないバイト数分の半角スペースが勝手に付いてきます。
対処方法
プリコンパイルオプション「picx=varchar2」を追加します。picx=varchar2
まとめ
COBOLで動いているシステムはまだまだたくさん残っていると思いますが、Oracleのバージョンを不用意に上げると、痛い目を見ます。以上
0 件のコメント :
コメントを投稿