Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 学习Oracle,基于日期设置布尔值_Sql_Oracle_Datetime - Fatal编程技术网

Sql 学习Oracle,基于日期设置布尔值

Sql 学习Oracle,基于日期设置布尔值,sql,oracle,datetime,Sql,Oracle,Datetime,我刚开始在学校学习一个关于Oracle的模块,我想寻求一些帮助,因为我对数据库系统的总体功能还比较陌生 作为我的一项任务的一部分,我正在尝试创建一个存储客户详细信息的表,其中有“LastBillPaidDate”列作为日期数据类型,“hasUnpaidBill”列和布尔数据类型列 在设置约束时,是否有办法使LastBillPaidDate在X天前时,我将hasUnpaidBill从false设置为true 再次感谢,并期待着向大家学习 您是否应该首先在表中列出has_unpaid_bill列?它

我刚开始在学校学习一个关于Oracle的模块,我想寻求一些帮助,因为我对数据库系统的总体功能还比较陌生

作为我的一项任务的一部分,我正在尝试创建一个存储客户详细信息的表,其中有“LastBillPaidDate”列作为日期数据类型,“hasUnpaidBill”列和布尔数据类型列

在设置约束时,是否有办法使LastBillPaidDate在X天前时,我将hasUnpaidBill从false设置为true


再次感谢,并期待着向大家学习

您是否应该首先在表中列出
has_unpaid_bill
列?它取决于
SYSDATE
。该需求闻起来像一个虚拟列,但是-您不能在那里使用
SYSDATE
,因为它不是一个确定性函数。因此,换成视图如何?将所需数据保留在表中,但查询视图:

表和若干样本记录:

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.
视图:


听起来更像是一个触发器,而不是约束。我不知道您是如何将Oracle SQL中的任何内容设置为布尔数据类型的,因为Oracle SQL不支持该数据类型(这违反了强制要求支持该数据类型的SQL标准)。假设它是值为0和1的数字数据类型,或者是值为“真”和“假”的字符串数据类型,但请确认。您要做的不是非常基本的介绍级别。首先想到的是一个计算列(虚拟列)——但这不起作用,因为计算值必须是确定性的,而SYSDATE不是。相反,正确的解决方案是在表中只存储lastbillpaiddate。然后基于该表创建一个视图,并使用SYSDATE计算一个额外的“Boolean”列。每当你需要访问这个布尔值时,从视图中选择,而不是从表中选择。嗯,这看起来是可行的,我会尝试一下,谢谢!)@ShaunLin:如果这个答案正确地回答了你的问题,那么点击复选标记。
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>