date oracle et nls paramètres
Question
je reçois une exception ORA-01858. Je pense que cela est dû à des paramètres et la date 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;
Est dbms_sql.bind_variable(sql_cursor, ':bind_timestamp', currentDate);
NLS dépendante?
Je veux dire avec certains paramètres NLS cela fonctionne normalement et d'autres, il échoue?
La solution
Lorsque vous traitez avec des dates, des paramètres NLS ne sont pas pertinents si vous fournissez votre propre chaîne de format:
WHERE arrival=TO_DATE('2011-09-05', 'yyyy-mm-dd')
Je suppose que vous comptez sur la jonglerie de type automatique, à savoir que vous fournissez au besoin une chaîne et de laisser Oracle le jeter à ce jour:
WHERE arrival='05/09/2011'
Dans ce cas, Oracle utilise le format par défaut comme spécifié dans les paramètres NLS.
Mise à jour: BTW, Code ORA-01858 signifie:
un caractère non numérique trouvé où un chiffre était attendu