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

Cegah Pemicu Sisipkan

Saya mengobrol dengan seorang dosen universitas yang mengajar PL/SQL setelah saya memberikan presentasi di sebuah konferensi. Pembicaraan saya adalah tentang praktik baik PL/SQL; salah satu slide saya hanya mengatakan "Jangan gunakan pemicu". Dosen tersebut mengatakan kepada saya bahwa dia menemukan saran seperti itu sulit untuk disesuaikan dengan kebutuhan kurikulum. Mereka harus mengajari siswa mereka semua sintaks, tetapi dia mengakui bahwa sering kali mereka menetapkan tugas yang menuntut solusi yang tidak akan kami gunakan saat menulis perangkat lunak secara profesional.

Ini adalah pertanyaan seperti itu. Pendekatan yang benar adalah dengan menggunakan batasan pemeriksaan, seperti Jawaban Gordon ditampilkan . Batasan lebih efisien, dan juga idiomatik. Tetapi guru Anda ingin Anda menulis pemicu, jadi ini kode Anda, dikoreksi.

CREATE OR REPLACE TRIGGER CheckAdvance
    BEFORE INSERT OR UPDATE OF advance ON titles
    FOR EACH ROW
BEGIN
    IF (:new.advance < 0  
         OR :new.advance > 100)
    THEN
        raise_application_error(-20000
                , 'Advance cannot be less than zero or greater than one hundred.');
    END IF;
END;

Hal-hal yang perlu diperhatikan:

  1. BUAT ATAU GANTI berarti kita dapat mengubah kode pemicu tanpa pernyataan DROP awal.
  2. MULAI dan AKHIR blok bingkai kode seperti badan pemicu.
  3. Kondisi statis dibingkai dengan kata kunci IF ... END IF; WHEN untuk keluar dari konstruksi loop.
  4. Referensikan nilai kolom tabel dengan kata kunci :NEW (dan :OLD) - perhatikan titik dua.
  5. Gunakan RAISE_APPLICATION_ERROR untuk melempar pengecualian; nomor kesalahan harus dalam kisaran -20999 hingga -20000 yang dicadangkan Oracle untuk pengecualian yang ditentukan pengguna.
  6. Buat pesan kesalahan Anda bermakna:beri tahu pengguna Anda apa yang mereka lakukan salah alih-alih membuat mereka menebak-nebak.
  7. Pelajari cara menggunakan lekukan agar kode Anda dapat dibaca. Rekan kerja masa depan Anda akan berterima kasih untuk itu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengembang SQL 4

  2. Cara menghapus kolom dari tampilan

  3. Apa gunanya batasan tampilan?

  4. Gabung/Pivot item dengan tabel EAV

  5. ORA-01797:operator ini harus diikuti oleh kesalahan APAPUN atau SEMUA