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

Oracle SELECT - Tanda kutip ganda atau tanpa tanda kutip ganda?

Jawaban dan tautan tentang casing benar, tetapi situasi Anda sedikit melampaui masalah kasus sederhana, baik karena nama kolom Anda dimulai dengan garis bawah dan karena klien Anda tampaknya biasanya menyembunyikan kutipan dari Anda.

Jika Anda mencoba membuat tabel dengan kolom bernama _id , tanpa mengutipnya, maka Anda akan mendapatkan kesalahan 'ORA-00911:karakter tidak valid', teks penyebabnya mengatakan 'pengidentifikasi tidak boleh dimulai dengan karakter ASCII apa pun selain huruf dan angka'; yang sebenarnya juga salah karena tidak bisa dimulai dengan angka juga (misalnya, 0_id memberikan 'ORA-00904::pengenal tidak valid'). Ini didukung oleh aturan penamaan objek database :

Jadi sepertinya Aqua Data Studio mengikuti konvensi untuk melampirkan versi huruf besar dari nama objek yang Anda berikan dalam tanda kutip ganda, sebuah praktik yang disebutkan di salah satu posting tertaut.

Dari apa yang Anda tunjukkan, select _id from ... diteruskan ke Oracle sebagai select "_ID" from ... , yang baik-baik saja jika nama kolom dibuat sebagai "_ID" . Tampaknya demikian halnya dengan table1 , tetapi table2 dibuat sebagai "_id" - sehingga ketidakcocokan kasus menghasilkan ORA-00904 sah yang Anda lihat.

Klien Anda tidak mengubah nama kolom yang sudah diapit tanda kutip ganda, jadi select "_id" from ... diteruskan ke Oracle apa adanya, dan berfungsi dengan baik untuk table2 (tetapi, sebaliknya, akan gagal untuk table1 ).

Oracle mengharuskan nama diapit dalam tanda kutip ganda jika tidak mengikuti aturan untuk pengidentifikasi yang tidak dikutip, dan jika itu dibuat seperti dikutip - kecuali jika nilai kutipan asli tetap valid, yaitu mengikuti aturan yang tidak dikutip dan dimasukkan dalam huruf besar. Karena nama kolom Anda dimulai dengan garis bawah, sejauh menyangkut Oracle, semua referensi untuk itu harus diapit dalam tanda kutip ganda terlepas dari kasusnya. Klien Anda hanya melakukannya di latar belakang jika Anda tidak mengutipnya sendiri.

Mengikuti saran yang diberikan orang lain untuk menghindari pengenal yang dikutip dan untuk selalu menggunakan nama yang valid tanpa tanda kutip akan menghindari masalah seperti ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Statistik Tabel GTT dan SYS.WRI$_OPTSTAT_TAB_HISTORY

  2. Pesan kesalahan ASP Classic SQL Query, tolong sintaks yang benar

  3. bagaimana cara mencetak Pernyataan (CallableStatement) di Jawa?

  4. Temukan panjang baris terpanjang dalam kolom di oracle

  5. Alternatif yang lebih cepat di Oracle untuk SELECT COUNT(*) FROM sometable