Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORA-1843:bukan bulan yang valid saat memperbarui catatan

Tanggal tidak memiliki format - tanggal disimpan secara internal ke database sebagai 7-byte (mewakili tahun, bulan, hari, jam, menit dan detik) dan tidak sampai antarmuka pengguna apa pun yang Anda gunakan (yaitu SQL/Plus, Pengembang SQL, Java, dll) mencoba menampilkannya kepada Anda, pengguna, dan mengonversi menjadi sesuatu yang menurut Anda bermakna (biasanya berupa string) yang memiliki format tanggal.

Jika Anda memberikan tanggal yang diformat ke suatu prosedur maka itu akan menjadi string dan Oracle akan mencoba untuk secara implisit melemparkannya ke tanggal menggunakan NLS_DATE_FORMAT parameter sesi:

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

Secara implisit dikonversi ke

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

Jika NLS_DATE_FORMAT tidak cocok maka Oracle akan memunculkan pengecualian (dan parameter dapat diatur oleh setiap pengguna sehingga Anda tidak harus mengandalkannya untuk konsisten - terutama di organisasi internasional ketika format tanggal default bergantung pada wilayah dan bahasa Anda).

Jika Anda memperbarui nilainya, gunakan DATE literal dan bukan string:

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

Atau konversi string secara eksplisit dan berikan model format:

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

Hal yang sama berlaku untuk meneruskan parameter ke fungsi Anda. Gunakan DATE harfiah:

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

atau secara eksplisit mengonversi string menjadi tanggal (dan tidak bergantung pada konversi implisit):

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. Oracle ExecuteNonQuery membeku di ASP.Net

  2. Oracle memesan hasil menggunakan kolom varchar campuran tetapi klausa di mana numerik

  3. Oracle EXECUTE SEGERA ke dalam kursor

  4. Mengapa saya mendapatkan ORA-01722 (nomor tidak valid)?

  5. Permintaan Oracle lambat (atau gagal) dari aplikasi .NET tetapi cepat dari Pengembang SQL