• 締切済み

ORA-01861について

Oracleで同一インスタンスの別スキーマに同じテーブル構成を作り開発環境としています。 そこで下記のSQL文を実行しようとすると、あるスキーマでは正常に検索されるけど別のスキーマでは 「ORA-01861 リテラルがフォーマット文字列と一致しません」 とのエラーメッセージが出力されます。 また困ったことに別マシンから同様の検索を行うとどのスキーマでも正常に検索が行われます。 Net8とかOracleクライアントの設定の問題でしょうか? DBサーバはOracle10g、クライアントは前者のマシンがOracle8i、後者のマシンにOracle9iがインストールされています。 【対象SQL文】 SELECT * FROM (SELECT TEMP.*, ROWNUM AS RM FROM (SELECT TEST.COL1, TEST.COL2 FROM TEST WHERE (COL1 = 'Dummy') AND COL2 = '1' AND DATE_COL <= '2005-11-04 12:00:00.0' -- ※この行に対して「ORA-01861」が発生しています。 ) TEMP ) WHERE RM >= 1 AND RM <= 300 ORDER BY RM /

みんなの回答

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.2

DATE_COL <= '2005-11-04 12:00:00.0' 小数部があり、9i で動作するところから予想すると DATE_COL はTIMESTAMP 型ではありませんか? それと、SQLを実行したツールと表定義はどのようになっていますか ? Oracle8i の環境は手元にないので確認しようがないのですが、 8i には TIMESTAMP型がありませんので、SQLPLUS ですと デフォルトの NLS_TIMESTAMP_FORMATが存在しないためにエラーになっているのかもしれません。 暗黙変換は使用せず、ちゃんと TO_XXX 関数を使用してみてください。

toraneko001
質問者

お礼

回答ありがとうございました。 ツールによる自動生成SQLが表記したようになるための問題です。 ツールの見直しをしなければいけないようですね。

  • entree
  • ベストアンサー率55% (405/735)
回答No.1

DATE_COL は VARCHAR2 型ですか、それとも DATE 型ですか? DATE 型であれば、基本的には比較するときに、 DATE_COL <= TO_DATE('2005-11-04 12:00:00', 'YYYY-MM-DD HH24:MI:SS') と日付に変換して比較してあげるか、 SQL 文を実行する前に、 ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; として、日付のフォーマットを Oracle に教えてあげなければなりません。

toraneko001
質問者

補足

回答ありがとうございます。 DATE_COLはDATE型です。 逆に比較式の時間の方に秒の小数点部まで含まれているからマシンによってうまくいくこと自体不思議だったりするんですが…。

関連するQ&A