Oracle sẽ thực hiện TO_DATE
ngầm hiểu trên các ký tự không phải ngày tháng khi chèn chúng vào DATE
cột sử dụng giá trị của NLS_DATE_FORMAT
như mặt nạ định dạng. Nếu ký tự không phải ngày tháng khớp với định dạng này thì nó sẽ hoạt động (và nếu không thì nó sẽ không hoạt động) - tuy nhiên, nếu NLS_DATE_FORMAT
đã từng được thay đổi thì nó sẽ ngay lập tức bị hỏng (bất kỳ lỗi nào rất khó gỡ lỗi vì mã đang hoạt động sẽ không hoạt động nhưng sẽ không có ai thay đổi mã).
Bạn có thể tìm ra NLS_DATE_FORMAT
hiện tại của mình với truy vấn:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Tốt hơn là sử dụng TO_DATE
một cách rõ ràng với mặt nạ định dạng đúng hoặc sử dụng ký tự ngày ANSI (tức là DATE '2014-12-01'
).
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'[email protected]',
105,
5000000,
60,
TO_DATE( '20-sep-1994', 'DD-Mon-YYYY' )
);
Hoặc, sử dụng định dạng ANSI bất khả tri ngôn ngữ / địa phương:
insert into employees_table
values(
05,
'Sophie',
'Kuchinskey',
'[email protected]',
105,
5000000,
60,
DATE '1994-09-20'
);