我想在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了一下,似乎我无法弄清楚以正确的格式输入日期。任何人都可以帮助我吗?
答案 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标识符。