2011-02-03 104 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 

我google了一下,似乎我不知道以正確的格式輸入日期。誰能幫我?

回答

10

查詢NLS_PARAMETERS在Oracle-,那麼你將能夠看到什麼格式的數據庫在接受日期在

然而通常我使用TO_DATE()函數:

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

在英國輸入我的日期。

4

到TO_DATE的替代()函數是用於日期或時間戳文字ANSI標準格式:使用ISO規則(YYYY-MM-DD和24小時格式總是指定

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

的日期和時間時間)

這也適用於很多其他(符合標準的)DBMS。

1

最好不要依賴於特定的值NLS_PARAMETERS設置, 原因這將使你的函數休息與另一NLS_DATE_FORMAT的ENV。

我最好在功能明確指定的日期格式在回答上述建議

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標識符作爲前綴。