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

Menggunakan pernyataan kasus dalam batasan cek

Saya rasa Anda dapat melakukan hal berikut:

CREATE TABLE Grade
(
  salary_grade    char(1) NOT NULL CHECK (REGEXP_LIKE(salary_grade, '[A-G]', 'c')),
  salary_scale    char(2) DEFAULT 'S1' NOT NULL,
  CONSTRAINT pk_grade PRIMARY KEY (salary_grade),
  CONSTRAINT ck_grade_scale CHECK ( REGEXP_LIKE(salary_grade, '[A-D]', 'c') AND salary_scale = 'S1'
                                 OR REGEXP_LIKE(salary_grade, '[E-G]', 'c') AND salary_scale = 'S2' )
);

Silakan lihat skema SQL Fiddle di sini.

Anda tidak memerlukan UPPER() kendala salary_grade karena pemeriksaan regex sudah cukup (Anda sudah memeriksa untuk memastikan itu adalah huruf besar antara A dan G). Saya tidak berpikir kendala pada salary_scale sendiri diperlukan baik karena akan terkandung, secara logis, dalam kendala terakhir.

PERBARUI

Inilah cara Anda melakukannya dengan CASE pernyataan:

CREATE TABLE Grade
(
  salary_grade    char(1) NOT NULL CHECK (REGEXP_LIKE(salary_grade, '[A-G]', 'c')),
  salary_scale    char(2) DEFAULT 'S1' NOT NULL,  
  CONSTRAINT pk_grade PRIMARY KEY (salary_grade),
  CONSTRAINT ck_grade_scale CHECK ( salary_scale = CASE WHEN REGEXP_LIKE(salary_grade, '[A-D]', 'c') THEN 'S1' ELSE 'S2' END )
);

Silakan lihat skema SQL Fiddle di sini.



  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 Gabung vs Pilih lalu Sisipkan atau Perbarui

  2. MODIFY COLUMN di Oracle - Bagaimana cara memeriksa apakah suatu kolom dapat dibatalkan sebelum disetel ke dapat dibatalkan?

  3. Buang data tabel Oracle ke pernyataan INSERT

  4. Metode Pengumpulan:Fungsi BATAS Dalam Database Oracle

  5. Hapus tabel dari database Oracle 10g