Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-1843:không phải là tháng hợp lệ trong khi cập nhật hồ sơ

Ngày không có định dạng - ngày được lưu trữ bên trong cơ sở dữ liệu dưới dạng 7 byte (đại diện cho năm, tháng, ngày, giờ, phút và giây) và phải đến khi bất kỳ giao diện người dùng nào bạn đang sử dụng (tức là SQL / Plus, SQL Developer, Java, v.v.) cố gắng hiển thị nó cho bạn, người dùng và chuyển đổi nó thành một cái gì đó mà bạn sẽ thấy có ý nghĩa (thường là một chuỗi) mà ngày có định dạng.

Nếu bạn đang cung cấp một ngày được định dạng cho một thủ tục thì nó sẽ là một chuỗi và Oracle sẽ cố gắng truyền ngầm nó thành một ngày bằng cách sử dụng NLS_DATE_FORMAT tham số phiên:

UPDATE your_table
SET your_date_column = '18-06-14'; -- or equivalently via a bind parameter

Được chuyển đổi ngầm thành

UPDATE your_table
SET your_date_column = TO_DATE(
                         '18-06-14',
                         ( SELECT value
                           FROM   NLS_SESSION_PARAMETERS
                           WHERE  parameter = 'NLS_DATE_FORMAT' )
                       );

Nếu NLS_DATE_FORMAT không khớp thì Oracle sẽ đưa ra một ngoại lệ (và tham số có thể được đặt bởi mỗi người dùng, do đó bạn không nên tin rằng nó nhất quán - đặc biệt là trong các tổ chức quốc tế khi định dạng ngày mặc định phụ thuộc vào lãnh thổ và ngôn ngữ của bạn).

Nếu bạn đang cập nhật giá trị thì hãy sử dụng DATE chữ chứ không phải chuỗi:

UPDATE your_table
SET your_date_column = DATE '2014-06-18';

Hoặc chuyển đổi rõ ràng chuỗi và cung cấp mô hình định dạng:

UPDATE your_table
SET your_date_column = TO_DATE( '18-06-14', 'DD-MM-RR' );

Điều này cũng đúng với việc chuyển các tham số cho hàm của bạn. Sử dụng DATE chữ:

BEGIN
  your_procedure(
    p_launch_date => DATE '2014-06-18'
  );
END;
/

hoặc chuyển đổi rõ ràng chuỗi thành một ngày (và không dựa vào chuyển đổi ngầm định):

BEGIN
  your_procedure(
    p_launch_date => TO_DATE( '18-06-14', 'DD-MM-RR' )
  );
END;
/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sửa lỗi ORA-65096 khi tạo kiểm tra tự động trong Django bằng Oracle

  2. Yêu cầu được đặt trong Trình quản lý đồng thời

  3. Sử dụng bí danh trong khi một phần của một câu lệnh tình huống trong Oracle SQL

  4. Truy xuất giá trị lớn nhất từ ​​sql-vb.net

  5. Cập nhật kết quả của một câu lệnh SELECT