Học Oracle, Đặt boolean dựa trên ngày tháng
Tôi vừa mới bắt đầu học một học phần trên Oracle, tôi muốn nhờ một số trợ giúp vì tôi còn khá mới về khả năng của hệ thống cơ sở dữ liệu nói chung.
Đối với một phần của một trong những nhiệm vụ của mình, tôi đang cố gắng tạo một bảng nơi nó lưu trữ thông tin chi tiết về khách hàng, có các cột "LastBillPaidDate" dưới dạng kiểu dữ liệu DATE và "hasUnpaidBill" và kiểu dữ liệu BOOLEAN.
Khi nói đến việc thiết lập các ràng buộc, có cách nào để tôi làm cho nó sao cho khi LastBillPaidDate là X ngày trước, tôi đặt hasUnpaidBill từ false thành true không?
Cảm ơn một lần nữa và mong được học hỏi từ tất cả các bạn!
Trả lời
Bạn có nên đặt has_unpaid_billcột trong bảng ở vị trí đầu tiên không? Nó phụ thuộc vào SYSDATE. Yêu cầu có vẻ giống như một cột ảo, nhưng - bạn không thể sử dụng SYSDATEở đó vì nó không phải là một hàm xác định. Do đó, làm thế nào về một chế độ xem thay thế? Giữ dữ liệu bạn cần trong bảng, nhưng truy vấn chế độ xem:
Bảng và một số bản ghi mẫu:
SQL> create table test
2 (id number,
3 last_bill_paid_date date
4 );
Table created.
SQL> insert into test values (1, date '2020-11-09');
1 row created.
SQL> insert into test values (1, date '2020-11-02');
1 row created.
Lượt xem:
SQL> create or replace view v_test as
2 select id,
3 last_bill_paid_date,
4 case when trunc(sysdate) - last_bill_paid_date > 5 then 'Y'
5 else 'N'
6 end has_unpai_dbill
7 from test;
View created.
SQL>
SQL> select * from v_test;
ID LAST_BILL_ H
---------- ---------- -
1 09.11.2020 N
1 02.11.2020 Y
SQL>