Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Cara Membaca dan Menafsirkan Kesalahan SQL

Kode kesalahan dalam SQL dihasilkan oleh server untuk memberikan informasi tentang apa yang salah. Mereka memiliki arti yang berbeda tergantung pada versi SQL yang Anda gunakan, tetapi mereka biasanya menunjukkan ketidakmampuan untuk melakukan operasi yang diminta.

Cara termudah untuk menjelajahinya adalah bahasa pemrograman paling sederhana yang disebut BASIC dan programnya seperti "Hello world". Ketik yang berikut ke dalam antarmuka:

PRINT "Hello, World!"

Jika Anda mengetik PRINT sebagai PRRRR, Anda akan mendapatkan pesan kesalahan (yang setara dalam kehidupan nyata adalah seseorang yang menyuruh Anda mengemudi di sisi kanan jalan, misalnya mematuhi peraturan).

Itu relatif mudah dalam hal operasi sederhana, tetapi bagaimana dengan sistem yang lebih kompleks? Kami juga menyertakan contoh kode SQL di sini. Selamat menikmati!

Kode berikut mengimpor fungsi yang diperlukan dari pustaka standar, lalu membuat konsol, mendapatkan penunjuk ke aliran keluaran standarnya, dan mencetak pesan ke aliran ini, dan melepaskan objek yang digunakan:

Option Explicit

    Declare Function AllocConsole Lib "kernel32" () As Long
    Declare Function FreeConsole Lib "kernel32" () As Long
    Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
    Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" _
           (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal _
           nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, _
           lpReserved As Any) As Long
    Declare Function Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Long

Private Sub Main()
    'create a console instance
    AllocConsole
    'get handle of console output
    Dim hOut As Long
    hOut = GetStdHandle(-11&)
    'output string to console output
    Dim s As String
    s = "Hello, World!" & vbCrLf
    WriteConsole hOut, ByVal s, Len(s), vbNull, vbNull
    'make a pause to look at the output
    Sleep 2000
    'close the handle and destroy the console
    CloseHandle hOut
    FreeConsole
End Sub

Jika Anda membuat kesalahan dalam kode ini, perlu beberapa saat untuk menemukannya, terutama jika Anda memiliki 500 halaman kode seperti ini. Jadi, komputer akan menemukan kesalahan dan mengarahkan Anda ke tempatnya.

Untuk Apa Kode Kesalahan SQL dan Bagaimana Cara Kerjanya?

Kegunaan kode kesalahan SQL adalah bahwa perangkat lunak menemukan kode Anda dan menunjukkannya (contoh). Anda tidak perlu memeriksa sendiri ribuan baris kode secara manual. Bayangkan hanya mendapatkan satu kode kesalahan (“Lebih beruntung lain kali, pecundang!” atau “Siapa yang mengajari Anda cara membuat kode, seekor kuda?”) dan harus mengulang seluruh proyek lagi!

Dalam arti tertentu, kode kesalahan adalah pembantu kecil Sinterklas yang sangat baik:jelas, berguna, dan menghemat banyak waktu. Anda hanya perlu mengenal mereka.

Mulai dari tingkat dasar, database adalah kumpulan informasi yang disatukan dan diklasifikasikan. Jenis yang kami minati adalah database relasional, artinya ada hubungan antara sel tempat data disimpan.

Misalnya, Anda mungkin memiliki seluruh kelompok siswa di sebuah universitas dan ingin memberikan hadiah kepada setiap orang yang mendapatkan lebih dari 90% dalam ujian mereka. Anda dapat menulis nama, jenis kelamin, alamat, nomor rekening bank mereka secara manual (semuanya terkait, oleh karena itu basis data relasional), nilai, dan kemudian secara manual memilih yang memiliki skor tinggi.

Kuno? Ya, tetapi Anda akan terkejut mengetahui berapa banyak perusahaan yang masih menjalankan bisnis dengan cara ini di abad ke-21. Bisa memakan waktu berbulan-bulan untuk menyelesaikan operasi yang membutuhkan waktu beberapa detik komputer untuk melakukannya. Terutama jika kita berbicara tentang ratusan atau ribuan siswa.

Sekarang, dengan memasukkan semua siswa ini ke dalam database, Anda dapat menggunakan bahasa seperti SQL:

SELECT * FROM Student WHERE Percentage>=90;

Selesai! Masalahnya, bagaimanapun, dimulai ketika Anda menulis kode Anda.

Dapat dimengerti bahwa ini menjadi sangat kompleks, jadi semakin banyak Anda menulis, semakin tinggi kemungkinan kode Anda mengandung kesalahan. Di sini, kode kesalahan akan sangat berguna. Ketika kita melihat kode kesalahan, kita harus bersyukur (yang tidak menghentikan kita dari memaki mereka setiap saat). Mereka melakukan semua kerja keras untuk Anda, dan yang perlu Anda lakukan hanyalah pergi ke sumbernya dan memperbaiki masalahnya.

Beri saya Beberapa Spesifik!

Ketika database gagal untuk menghasilkan hasil yang diinginkan, kode kesalahan dilemparkan. Ini membantu mengidentifikasi masalah dan cara memperbaikinya. Kode Kesalahan SQL, seperti yang di bawah ini, akan berguna saat memecahkan masalah apa pun dengan basis data Anda:

Pesan Kesalahan Basis Data Oracle9i

Rilis 2 (9.2)

ORA-00904:“jumlah baris yang ditentukan melebihi jumlah maksimum”.

ORA-00900:“hak istimewa yang tidak memadai pada objek”.

ORA-00900:“pernyataan SQL tidak valid”.

ORA-00902:“tipe data tidak valid”.

Kami memiliki banyak jenis kesalahan dalam SQL. Tetapi jika Anda tidak akan membingkainya dan meletakkannya di dinding Anda, Anda perlu tahu cara menghadapinya. Hal baiknya adalah, kesalahan SQL datang dengan tautan ke lokasi yang tepat dari kesalahan dalam kode, dan juga memberikan informasi tentang apa yang salah.

Mari kita mulai dengan contoh kesalahan paling sederhana:

ORA-00900:“pernyataan SQL tidak valid”.

Seperti yang mungkin sudah Anda duga, Anda perlu menulis perintah dengan benar. Mungkin ada salah ketik atau koma di tempat yang bukan tempatnya. Atau, tergantung kasusnya, Anda mungkin perlu menginstal perangkat lunak tambahan:

“Pernyataan tidak dikenali sebagai pernyataan SQL yang valid.

Galat ini dapat terjadi jika Opsi Prosedural tidak diinstal dan pernyataan SQL dikeluarkan yang memerlukan opsi ini (misalnya, pernyataan CREATE PROCEDURE). Anda dapat menentukan apakah Opsi Prosedural diinstal dengan memulai SQL*Plus. Jika spanduk PL/SQL tidak ditampilkan, maka opsi tersebut tidak diinstal.

Tindakan:Perbaiki sintaks atau instal Opsi Prosedural”.

Hal yang sama berlaku untuk tipe pemformatan atau penempatan tipe data yang salah di tempat yang tidak seharusnya:

ORA-00902 tipe data tidak valid

“Penyebab:Tipe data yang dimasukkan dalam pernyataan CREATE atau ALTER TABLE tidak valid.

Tindakan:Perbaiki sintaks”.

Anda dapat menemukan informasi lebih lanjut di dokumentasi Oracle.

Kode kesalahan SQL adalah cara paling umum untuk men-debug kueri SQL. Setiap kali Anda menanyakan database, dan masalah terjadi, mesin database menghasilkan kode kesalahan SQL. Kode-kode ini mewakili lokasi masalah dalam kueri dan memberikan informasi kepada pemrogram tentang cara memperbaikinya atau cara menafsirkan apa yang menyebabkannya.

Jenis Kesalahan Utama

Kesalahan Format

Misalnya, saat Anda menggunakan SELECT, Anda harus mengikutinya dengan urutan tertentu (daftar kolom dalam tabel, yang berisi siswa kami dan nilainya), lalu bintang. Jika Anda tidak mengikuti formatnya, menukar bintang dan koma, Anda akan mendapatkan pesan kesalahan.

“jika ada TRANSAKSI MULAI, selalu harus diakhiri dengan transaksi COMMIT atau ROLLBACK.”

Contoh lain:setelah FROM Anda menggunakan operator seperti WHERE yang membutuhkan kondisi. Ini bisa berupa kondisi apa pun, termasuk kondisi yang mengekstrak data, misalnya, semua siswa dengan nilai di bawah 30. Jika kolom ini dibiarkan kosong, Anda akan mendapatkan kesalahan format.

Kesalahan Operator

Perintah harus kompatibel dengan SQL. Anda dapat memasukkan SUM dan COUNT dengan WHERE. Jika tidak, Anda akan mendapatkan kesalahan.

Kesalahan Prosedur

Kode prosedural adalah kode yang disimpan di server yang dapat Anda gunakan untuk tujuan Anda dengan sedikit perubahan.

“Prosedur tersimpan adalah kode SQL yang disiapkan yang dapat Anda simpan, sehingga kode tersebut dapat digunakan kembali berulang kali… Jadi, jika Anda memiliki kueri SQL yang Anda tulis berulang kali, simpan sebagai prosedur tersimpan, dan kemudian panggil saja untuk mengeksekusinya. ” ( Sekolah W3 )

Untuk membuat prosedur tersimpan dari tabel bernama Pelanggan dengan semua catatannya dan jalankan, kami memiliki kode berikut:

CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;

EXEC SelectAllCustomers;

Dengan kata lain, prosedur seperti template yang disimpan di server yang dapat Anda ambil, ubah, dan gunakan sesuai kebutuhan.

Kesalahan prosedural adalah jenis kesalahan yang kurang lebih biasa. Perbedaannya adalah, mereka tidak merujuk pada satu baris kode tetapi ke seluruh prosedur (templat) yang Anda ambil dan coba ubah sedikit.

Bayangkan Anda memiliki dua meja, satu kosong dan satu penuh. Anda menerapkan kode di bawah ini ke tabel kosong:

INSERT to transfer data
SELECT and WHERE to choose data

Contoh kesalahan strategis adalah menggunakan operator seperti operator IN dan NOT IN. Ini menggoda namun tidak dioptimalkan dengan baik (menggunakan GABUNG adalah pilihan strategis yang jauh lebih baik).

Kesalahan Fatal dan Non-fatal

Database seperti MySQL atau PostgreSQL menyimpan data dalam tabel, yang terdiri dari baris dan kolom. Kueri basis data adalah perintah SQL yang memberi tahu basis data apa yang harus dilakukan dengan datanya. Mereka bisa sesederhana memilih semua catatan dari tabel, atau cukup rumit untuk membuat tabel yang sama sekali baru.

Ada dua jenis kesalahan yang dapat terjadi saat menggunakan perintah ini:fatal dan non-fatal.

Kesalahan fatal menghentikan eksekusi pernyataan, sedangkan kesalahan non-fatal tidak.

Kesalahan fatal adalah kesalahan database yang tidak dapat diperbaiki. Kesalahan non-fatal adalah masalah yang dapat diselesaikan dengan beberapa cara, misalnya dengan memulai ulang layanan SQL Server atau instance SQL Server.

Sebuah database mungkin memiliki kesalahan fatal dan non-fatal pada waktu tertentu karena berbagai alasan. Terkadang, jika Anda mengetahui masalahnya, Anda dapat menyelesaikannya tanpa terlalu banyak kesulitan. Di lain waktu, tidak terlalu banyak.

Jenis kesalahan yang paling umum adalah sintaks atau masalah runtime lainnya dengan sistem database yang mengakses data dari tabel SQL. Kesalahan ini dapat ditangkap dalam pengujian sebelum menjalankan kode. Anda dapat memastikan bahwa semuanya berfungsi dengan baik saat dijalankan terhadap sistem database.

Membuat Kode Kesalahan Anda dengan RAISERROR

“Ada fungsi RAISERROR yang dapat digunakan untuk menghasilkan pesan kesalahan khusus kami yang merupakan cara yang bagus untuk menerjemahkan pesan kesalahan yang membingungkan menjadi sesuatu yang sedikit lebih bermakna yang akan dipahami orang.”

Fungsi RAISERROR adalah perintah sistem server SQL yang dapat memunculkan pesan kesalahan. Anda dapat menggunakannya untuk menunjukkan kesalahan, peringatan, atau pesan informasi.

Kesalahan dapat disebabkan oleh programmer atau oleh SQL Server itu sendiri. Ini berguna untuk memberikan umpan balik ketika terjadi kesalahan, tetapi juga ketika sesuatu perlu terjadi tanpa mengganggu eksekusi pernyataan lain dalam kumpulan.

Gunakan sintaks berikut:

RAISERROR ( [ error_number ] , [ message ], [ state ])

Anda juga dapat menerapkan RAISERROR untuk menghentikan eksekusi pernyataan atau meneruskan kesalahan yang dihasilkan oleh pernyataan SQL ke aplikasi lain. Misalnya, Anda dapat memunculkan pesan kesalahan yang akan menyebabkan eksekusi kumpulan atau pernyataan saat ini berhenti, serta menampilkan pesan yang ditentukan.

Penggunaan paling umum untuk RAISERROR adalah untuk menghasilkan pesan kesalahan ketika data tidak memenuhi beberapa kriteria, seperti memasukkan terlalu banyak karakter ke dalam bidang yang hanya memungkinkan 50 karakter.

Raiserror(msg) berguna untuk menangani kesalahan yang terjadi selama pemrosesan, dan tidak mengharuskan seluruh transaksi gagal karena satu kesalahan individu.

Sekarang Anda dapat membuat kesalahan Anda sendiri sebanyak yang Anda inginkan. Bergembiralah!

Menangani Kesalahan

Untuk mengatasi kesalahan, kita harus dapat mengendalikannya dan mengetahui semua informasi terkait. Hal ini diperlukan untuk kasus apa pun yang lebih rumit daripada salah ketik PRINT di “Hello World”.

Salah satu cara yang berguna untuk menangkap kesalahan adalah menggunakan TRY…CATCH. Alat ini memungkinkan Anda untuk mengambil kode Anda dan menempatkannya di lingkungan yang dapat diperiksa dan ditangani dengan aman. Di sana, Anda dapat mengekstrak data darinya. Putuskan apakah Anda ingin melaporkan kesalahan, mencari tahu lebih lanjut, atau memperbaikinya.

Kotak pasir server SQL ini berjalan seperti ini:

BEGIN TRY  
 	--code to try
END TRY  
BEGIN CATCH  
 	--code to run if an error occurs
--is generated in try
END CATCH

Kode yang ingin Anda lihat ditempatkan di antara BEGIN TRY dan END TRY. Jika kesalahan terjadi, itu akan dikirim ke pernyataan CATCH. Ini memberi kami banyak fungsi yang berguna:

  • ERROR_NUMBER mengembalikan nomor internal kesalahan
  • ERROR_STATE mengembalikan informasi tentang sumber
  • ERROR_SEVERITY mengembalikan informasi tentang apa pun, mulai dari kesalahan informasi hingga kesalahan yang dapat diperbaiki oleh pengguna DBA, dll.
  • ERROR_LINE mengembalikan nomor baris tempat kesalahan terjadi
  • ERROR_PROCEDURE mengembalikan nama prosedur atau fungsi yang tersimpan
  • ERROR_MESSAGE mengembalikan informasi yang paling penting dan itu adalah teks pesan kesalahan.

Inilah yang kami dapatkan ketika kami mencoba membagi 1 dengan 0:

USE AdventureWorks2014
GO
-- Basic example of TRY...CATCH
 
BEGIN TRY
-- Generate a divide-by-zero error  
  SELECT
    1 / 0 AS Error;
END TRY
BEGIN CATCH
  SELECT
    ERROR_NUMBER() AS ErrorNumber,
    ERROR_STATE() AS ErrorState,
    ERROR_SEVERITY() AS ErrorSeverity,
    ERROR_PROCEDURE() AS ErrorProcedure,
    ERROR_LINE() AS ErrorLine,
    ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO

Seperti yang Anda lihat, fungsi TRY…CATCH sangat berguna.

Ringkasan

Sekarang Anda tahu persis apa itu kode kesalahan SQL, jenis kesalahan apa yang ada, mengapa itu terjadi, bagaimana mereka dikotak pasir dan dipelajari, cara membuat sinyal kesalahan Anda, dll. Anda jauh lebih dari sekadar siap untuk menangani kesalahan! Jika tidak, beri tahu kami, dan kami akan merilis lebih banyak panduan di masa mendatang. Semoga berhasil!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perancangan Model Data Sistem Pemesanan Kamar Hotel

  2. Membuat Model Lebih Lanjut Dengan Status Pengguna, Utas, dan Posting

  3. Koneksi Database atau kesalahan Otentikasi dengan Jenis Bergerak

  4. SQL ORDER OLEH

  5. SQL DROP TABLE untuk Pemula