Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle lernen, booleschen Wert basierend auf dem Datum festlegen

Sollten Sie die has_unpaid_bill haben Spalte in der Tabelle an erster Stelle? Es hängt von SYSDATE ab . Die Anforderung riecht nach eine virtuelle Spalte, aber - Sie können SYSDATE nicht verwenden da es sich nicht um eine deterministische Funktion handelt. Wie wäre es also mit einer Ansicht stattdessen? Behalten Sie benötigte Daten in der Tabelle, aber fragen Sie die Ansicht ab:

Tabelle und mehrere Beispieldatensätze:

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.

Ansicht:

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>