2011-02-03 14 views
1

Oracleで単純な関数を実行します。私はそれを実行することができるはずシンプルなOracleクエリ:リテラルがフォーマット文字列と一致しません

CREATE OR REPLACE FUNCTION NewCaseListForValidation 
(
          p_fromDate in DATE, 
          p_toDate in DATE, 
          p_rowCount in INT 
) 
RETURN 
          SYS_REFCURSOR 
IS 
          return_value SYS_REFCURSOR; 
... 

:署名は、次のように定義されて

var rc refcursor 
exec :rc := newcaselistforvalidation('2010-01-01','2011-01-01',100); 
print :rc 

しかし、「newcaselistforvalidation( '2010-01-01'、 '2011-01-01を入力するとき」、100)」、私が取得:

ERROR at line 1: 
ORA-01861: literal does not match format string 
ORA-06512: at line 1 

私は少しグーグル、私が正しい形式で日付を入力することは理解できないようです。誰でも助けてくれますか?

答えて

10
Oracle-で

クエリNLS_PARAMETERSあなたは、あなたのDBは、日付を受け入れているどのような形式見ることができます一般的に

私はTO_DATE()関数を使用しかし:。

to_date('01-01-2011','DD-MM-YYYY'); 

英国でのを私の日付を入力してください。

4

TO_DATEの代わりに()関数は、ANSI標準のDATEまたはTIMESTAMPリテラルの形式を使用することです:常にISOルール(YYYY-MM-DDと24時間形式を使用して指定され

DATE '2010-01-31' 
TIMESTAMP '2010-01-31 21:22:23'

日付と時刻を時間のため)

これは他の多くの(標準に準拠した)DBMSでも動作します。

1

これは別のNLS_DATE_FORMATとENVであなたの機能ブレークを行いますNLS_PARAMETERS設定、 原因で特定の値に依存しないことをお勧めします。

私は

exec :rc := newcaselistforvalidation(to_date('2010-01-01','YYYY-MM-DD'),to_date('2011-01-01','YYYY-MM-DD'),100); 
0

INSERT INTO tblDate(dateStart) 値('20 -JUN-2013' )上記の回答で示唆したようが明示的にあなたの関数でをフォーマットする日付を指定していただきたいです。 月の整数を文字列に変更すると、 'DD-MON-YYYY'はDATE識別子を前もって指定することなく有効なデータ文字列として機能します。

関連する問題