2

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

少しググったのですが、正しい形式で日付を入力できないようです。誰か助けてもらえますか?

4

4 に答える 4

10

OracleでNLS_PARAMETERSを照会すると、DBが日付を受け入れる形式を確認できます。

ただし、通常はto_date()関数を使用します。

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

英国では私の日付を入力します。

于 2011-02-03T09:10:33.217 に答える
5

to_date()関数の代わりに、DATEまたはTIMESTAMPリテラルにANSI標準形式を使用することもできます。

日付'2010-01-31'
タイムスタンプ'2010-01-3121:22:23'

日付と時刻は常にISOルール(YYYY-MM-DDおよび時刻の24時間形式)を使用して指定されます

これは、他の多くの(標準準拠の)DBMSでも機能します。

于 2011-02-03T09:47:47.703 に答える
1

NLS_PARAMETERS設定の特定の値に依存しないことをお勧めします。これにより、関数が別のNLS_DATE_FORMATで環境内で中断するためです。

上記の回答で提案されているように、関数で日付の書式を明示的に指定します

exec :rc := newcaselistforvalidation(to_date('2010-01-01','YYYY-MM-DD'),to_date('2011-01-01','YYYY-MM-DD'),100);
于 2011-05-25T09:44:48.657 に答える
0

INSERT INTO tblDate(dateStart)値('20 -JUN-2013'); 月の整数を文字列に変更すると、「DD-MON-YYYY」は、DATE識別子を前に付けることなく有効なデータ文字列として機能します。

于 2013-06-18T19:00:18.707 に答える