0

关于我一直做错的语法可能是非常简单的事情,但在过去的 2 个小时里,当我在表和列级别定义此约束作为 CREATE TABLE 的一部分时,我一直在尝试多个语句,并使用 ALTER TABLE 分别尝试相同但是没有任何成功:

Create table tb1 (
tb1_quantity number,
tb1_price number,
tb1_total number constraint tb1_total_CK
CHECK(tb1_total = SUM(tb1_quantity * tb1_price))
);

我一直在尝试的另一种方法是:

Create table tb1 (
tb1_quantity number,
tb1_price number,
tb1_total number constraint tb1_total_CK
CHECK(SUM(tb1_quantity * tb1_price))
)
;

似乎与我声明功能的方式有关,因为我不断收到通常的 ORA-00934 此处不允许使用组功能的消息。我已经阅读了使用触发器和视图的多种替代方法,但我渴望使用约束使其工作,我是按照正确的方式使用这种语法还是只是措辞不正确?

4

1 回答 1

4

您需要将其定义为不合时宜的约束..即:

Create table tb1 (
tb1_quantity number,
tb1_price number,
tb1_total number,
 constraint tb1_total_CK CHECK(tb1_total = tb1_quantity * tb1_price)
);

例如:

SQL> Create table tb1 (
  2  tb1_quantity number,
  3  tb1_price number,
  4  tb1_total number,
  5   constraint tb1_total_CK CHECK(tb1_total = tb1_quantity * tb1_price)
  6  );

Table created.


SQL> insert into tb1 values (1, 1, 1);

1 row created.

SQL> insert into tb1 values (1, 1, 2);
insert into tb1 values (1, 1, 2)
*
ERROR at line 1:
ORA-02290: check constraint (DTD_TRADE.TB1_TOTAL_CK) violated
于 2013-04-02T13:10:08.320 回答