1. ホーム

Oracle の例外 ORA-01861 を解決する: リテラルが形式文字列に一致しません。

2022-02-13 05:19:07

これを3回言うことが重要です。

ウィンドウズでのプログラミングはとても嫌だ!

ウィンドウズでのプログラミングは大嫌い

ウィンドウズでのプログラミングはとても嫌です


ADO経由でOracleデータベースを操作するVCアプリケーション(正直、ADO、OLEDB、ODBCの関係が一体どうなっているのかわからない)において、データ同期文の中で更新日付型文がto_date関数を使用せず、アプリケーションがエラー:Descriptionを返します。[オラクル][ ODBC][Ora]ORA-01861  :リテラルが形式文字列に一致しません。

日付文字列の書式を指定しない理由ですが、デフォルトの書式を設定すれば解決しますし、そうでなければ日付型のデータを操作するたびにto_dateするのは煩わしいですからね。

クライアントアプリケーションからエラーが報告されたので、sqlplusやサードパーティークライアントがto_dateを省略できるように、環境変数にNLS_DATE_FORMATを設定しましたが、アプリケーションからはまだエラーが報告されます。

仕方なく、リテラルがフォーマット文字列と一致しない場合の解決策をネットでいろいろと探したり、レジストリを書き換えて NLS_DATE_FORMATですが、まだうまくいきません。

困惑しています、環境変数やレジストリも食わず、アプリケーションで何をしようとしているのでしょうか?ODBCやOLEDBやADOのどの層がこのデフォルトの日付形式を知らないんだ?

ただ、必死になっている時に、データベースのサーバー側で設定されているパラメータが残っていると思ったのですが、まさかサーバー側の問題とは思いませんでした、sqlplusはすでにクライアント側で動作しているので、to_dateの件はクライアント側でやればいいのですよね?

サーバーサイドに行き、showパラメータnls_date_formatを確認したところ、値が空だったため、変更してみたところ、アプリケーションからエラーが報告されなくなったのですが、どうすればよいでしょうか?このパラメータの目的は、クライアントが何も言わない場合、このフォーマットで日付データを処理することだと思います。