こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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
/

投稿日時 - 2005-11-04 19:14:02

QNo.1757149

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

DATE_COL <= '2005-11-04 12:00:00.0'

小数部があり、9i で動作するところから予想すると
DATE_COL はTIMESTAMP 型ではありませんか?
それと、SQLを実行したツールと表定義はどのようになっていますか ?

Oracle8i の環境は手元にないので確認しようがないのですが、
8i には TIMESTAMP型がありませんので、SQLPLUS ですと
デフォルトの NLS_TIMESTAMP_FORMATが存在しないためにエラーになっているのかもしれません。

暗黙変換は使用せず、ちゃんと TO_XXX 関数を使用してみてください。

投稿日時 - 2005-11-04 23:51:44

お礼

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

投稿日時 - 2005-11-11 13:53:08

ANo.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 に教えてあげなければなりません。

投稿日時 - 2005-11-04 21:42:36

補足

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

投稿日時 - 2005-11-07 16:53:11

あなたにオススメの質問