简单的Oracle查询:文字与格式字符串不匹配

时间:2011-02-03 09:01:51

标签: oracle sqlplus date-format ora-01861

我想在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

我google了一下,似乎我无法弄清楚以正确的格式输入日期。任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:11)

在Oracle中查询NLS_PARAMETERS-然后您就可以看到您的数据库接受日期的格式。

但通常我使用to_date()函数:

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

在英国输入我的约会。

答案 1 :(得分:5)

to_date()函数的替代方法是对DATE或TIMESTAMP文字使用ANSI标准格式:

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

始终使用ISO规则指定日期和时间(YYYY-MM-DD和24小时时间格式)

这也适用于许多其他(标准兼容)DBMS。

答案 2 :(得分: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);

答案 3 :(得分:0)

INSERT INTO tblDate(dateStart) 价值观('20 -JUN-2013'); 如果将月份整数更改为字符串'DD-MON-YYYY'作为有效数据字符串,则不必在其前面加上DATE标识符。