Learning Oracle, Setting boolean berdasarkan tanggal

Nov 10 2020

Saya baru saja memulai modul di sekolah di Oracle, saya ingin meminta bantuan karena saya relatif baru dalam hal kemampuan sistem database secara umum.

Untuk bagian dari salah satu tugas saya, saya mencoba membuat tabel di mana ia menyimpan rincian pelanggan, ada kolom "LastBillPaidDate" sebagai tipe data DATE dan "hasUnpaidBill" dan tipe data BOOLEAN.

Ketika datang ke pengaturan batasan, apakah ada cara bagi saya untuk membuatnya sedemikian rupa sehingga ketika LastBillPaidDate adalah X hari yang lalu, saya menetapkan hasUnpaidBill dari salah ke benar?

Sekali lagi terima kasih dan berharap dapat belajar dari Anda semua!

Jawaban

1 Littlefoot Nov 10 2020 at 17:10

Haruskah Anda memiliki has_unpaid_billkolom di tabel sejak awal? Itu tergantung SYSDATE. Persyaratannya berbau seperti kolom virtual, tetapi - Anda tidak dapat menggunakannya di SYSDATEsana karena ini bukan fungsi deterministik. Oleh karena itu, bagaimana dengan tampilan ? Simpan data yang Anda butuhkan di tabel, tetapi buat kueri tampilan:

Tabel dan beberapa catatan sampel:

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.

Melihat:

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>