Una fecha no tiene formato:se almacena internamente en la base de datos como 7 bytes (que representa año, mes, día, hora, minuto y segundo) y no es hasta que la interfaz de usuario que esté utilizando (es decir, SQL/Plus, SQL Developer, Java, etc.) intente mostrársela a usted, el usuario, y convierta en algo que encontraría significativo (generalmente una cadena) que la fecha tiene un formato.
Si proporciona una fecha formateada a un procedimiento, será una cadena y Oracle intentará convertirla implícitamente en una fecha usando NLS_DATE_FORMAT
parámetro de sesión:
UPDATE your_table
SET your_date_column = '18-06-14'; -- or equivalently via a bind parameter
Se convierte implícitamente a
UPDATE your_table
SET your_date_column = TO_DATE(
'18-06-14',
( SELECT value
FROM NLS_SESSION_PARAMETERS
WHERE parameter = 'NLS_DATE_FORMAT' )
);
Si el NLS_DATE_FORMAT
no coincide, Oracle generará una excepción (y cada usuario puede configurar el parámetro, por lo que no debe confiar en que sea consistente, especialmente en organizaciones internacionales donde el formato de fecha predeterminado depende de su territorio e idioma).
Si está actualizando el valor, use un DATE
literal y no una cadena:
UPDATE your_table
SET your_date_column = DATE '2014-06-18';
O convierta explícitamente la cadena y proporcione el modelo de formato:
UPDATE your_table
SET your_date_column = TO_DATE( '18-06-14', 'DD-MM-RR' );
Lo mismo es cierto para pasar parámetros a su función. Utilice una DATE
literal:
BEGIN
your_procedure(
p_launch_date => DATE '2014-06-18'
);
END;
/
o convierta explícitamente la cadena en una fecha (y no confíe en la conversión implícita):
BEGIN
your_procedure(
p_launch_date => TO_DATE( '18-06-14', 'DD-MM-RR' )
);
END;
/