PDA

View Full Version : [Q] Về rằng buộc CHECK trên một cột



xblackbox
07-10-2002, 17:19
Cho mình hỏi một chút.
Khi mình tạo một bảng có một cột là ISBN (mã số sách), cột này có dạng như sau: ***x-***-*** (với x là một chữ số) ví dụ:
1987-025-987
Vậy khi tạo bảng có cột này với ràng buộc cột thì phải tạo lệnh ràng buộc như thế nào. Mình đã đọc nhiều tài liệu nhưng không biết phải ràng buộc nó với toán tử LIKE như thế nào cả.
Có bạn nào biết chỉ cho mình với. Cám ơn nhiều.

9Star
22-10-2002, 20:01
Cấu trúc của lệnh Check như sau:
... CHECK CheckName(ColumnName LIKE "Expression")

Giả sử bạn đã tạo xong bảng, bây giờ bạn muốn thêm check vào thì làm như sau:

ALTER TABLE TableName
ADD CONSTRAINT checkMss CHECK (ISBN LIKE "([0-9][0-9][0-9][0-9])-([0-9][0-9][0-9])-([0-9][0-9][0-9])")

Còn nếu bạn muốn tạo CHECK khi tạo bảng thì bạn chỉ cần ràng buộc ngay khi khai báo cột đó thôi.

Chúc bạn thành công.

xblackbox
25-10-2002, 10:13
Trước hết mình cám ơn 9star rất nhiều, nhưng cú pháp của bạn có vẻ giống SQL Server. mình muốn nói là thực hiện trong Oracle cơ mà. Mình chưa thấy tài liệu nào về Oracle làm như vậy cả. Nhưng mình sẽ Try it out!. Hy vọng chúng ta sẽ tiếp tục discuss.
By

9Star
26-10-2002, 10:26
Uh mình quên mất là bạn hỏi trong ORACLE mình viết trong SQL. Hi vong là nó chạy được

lcnguyen
17-07-2003, 20:11
Try this:
alter table emp add (isbn VARCHAR2(15) CHECK
(TRANSLATE(ISBN, '***-***-***','X')IS NOT NULL))

For this statement, you can either insert a value like 123-456-789 or 123456789.
If you want to enforce a '-' between it, then use the below statement:

alter table emp add (isbn VARCHAR2(15) CHECK
(isbn like substr(isbn,1,3)||'-'||substr(isbn,5,3)||'-'||substr(isbn,9,3)))