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

cx_Oracle 'ORA-01843:không phải là tháng hợp lệ' với tham số unicode

Đó thực sự là một lỗi trong Oracle 10.5.0.2 và 11.2.0.1.

Lỗi có thể được tạo lại như sau:

đặt NLS_TIMESTAMP_FORMAT trong phiên.

Chạy bất kỳ chuyển đổi TO_DATE ngầm hoặc rõ ràng nào với dữ liệu unicode.

TO_TIMESTAMP ngầm hoặc rõ ràng tiếp theo với dữ liệu unicode sẽ kích hoạt thiết lập lại nội bộ của định dạng dấu thời gian.

Tất cả TO_TIMESTAMP liên tiếp sẽ không thành công và TO_CHAR của dấu thời gian sẽ tạo ra đầu ra không hợp lệ.

Đây là mã để kiểm tra hành vi:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';

REM --- WORKS:
SELECT TO_TIMESTAMP('2013-06-24 18:15:10.312') FROM DUAL;

REM --- WORKS:
SELECT TO_DATE('2013-06-24 18:15:10') FROM DUAL;

REM --- WORKS:
SELECT TO_TIMESTAMP('2013-06-24 18:15:10.312') FROM DUAL;

REM --- WORKS:
SELECT TO_TIMESTAMP(x) FROM (SELECT CAST('2013-06-24 18:15:10.312' AS NVARCHAR2(30)) AS X FROM DUAL);

REM --- WORKS:
SELECT TO_DATE(x) FROM (SELECT CAST('2013-06-24 18:15:10' AS NVARCHAR2(30)) AS X FROM DUAL);

REM --- WORKS:
SELECT TO_TIMESTAMP('2013-06-24 18:15:10.312') FROM DUAL;

REM !!! FAILS!
SELECT TO_TIMESTAMP(x) FROM (SELECT CAST('2013-06-24 18:15:10.312' AS NVARCHAR2(30)) AS X FROM DUAL);

REM !!! FAILS!
SELECT TO_TIMESTAMP('2013-06-24 18:15:10.312') FROM DUAL;

REM --- WORKS:
SELECT TO_DATE('2013-06-24 18:15:10') FROM DUAL;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi SQL:ORA-02298:không thể xác thực (SYSTEM.AEROPUERTO_FK) - không tìm thấy khóa cha

  2. Ngăn chặn tự động gửi kết nối Oracle cho Nguồn dữ liệu JNDI trên JBoss 7 (Jeeves DBMS)

  3. Chạy thủ tục lưu trữ trong nhà phát triển SQL?

  4. Tự động thêm các bản ghi có giá trị bằng 0 cho các AP tiếp theo để chức năng phân tích hoạt động

  5. Làm thế nào để lưu trữ kết quả của một hàm sẽ trả về sysrefcursor?