2011-09-05 47 views
1

我得到一個ORA-01858異常。我認爲這是由於NLS設置和日期:oracle日期和nls設置

declare 
    currentDate DATE := sysdate; 
    queryString VARCHAR2(300) := '... where blablabla = :bind_timestamp ...'; 
    sql_cursor integer; 
begin 
    sql_cursor := dbms_sql.open_cursor; 
    dbms_sql.parse(sql_cursor, queryString, dbms_sql.native); 
    dbms_sql.bind_variable(sql_cursor, ':bind_timestamp', currentDate); 
    rowsProcessed := dbms_sql.execute(sql_cursor); 
    dbms_sql.close_cursor(sql_cursor); 
end; 


dbms_sql.bind_variable(sql_cursor, ':bind_timestamp', currentDate); NLS依賴?

我的意思是有些NLS設置可以正常工作,而其他的則失敗了?

+2

請給我們完整的SQL語句。我想這個錯誤並不是來自'DATE'變量的使用 –

+0

謝謝你,那是我想知道的如果你讓你的評論成爲答案,我會將問題標記爲已解決。 –

+0

'blablabla'表示的列是什麼數據類型? –

回答

0

當日期處理,NLS設置不相關的,如果你提供你自己的格式字符串:

WHERE arrival=TO_DATE('2011-09-05', 'yyyy-mm-dd') 

我的猜測是,你依賴於自動型雜耍,也就是說,你所提供的字符串,讓甲骨文將它轉換爲日期的要求:

WHERE arrival='05/09/2011' 

在這種情況下,Oracle使用在你的NLS設置中指定的默認格式。

更新: BTW,該ORA-01858 code表示:

發現一個非數字字符,其中數字預計