在Oracle11g中,XOR是否在触发器和检查约束中工作?
我试图找出是否可以在触发器和检查约束中使用XOR。我已经看过PL/SQL的实现,但还没有完全弄清楚是否可以在触发器和检查约束中使用XOR函数。 我尝试在检查约束中使用它:在Oracle11g中,XOR是否在触发器和检查约束中工作?,oracle,oracle11g,triggers,Oracle,Oracle11g,Triggers,我试图找出是否可以在触发器和检查约束中使用XOR。我已经看过PL/SQL的实现,但还没有完全弄清楚是否可以在触发器和检查约束中使用XOR函数。 我尝试在检查约束中使用它: CREATE TABLE my_table ( tableid NUMBER PRIMARY KEY, foreignkey1 NUMBER, foreignkey2 NUMBER, CONSTRAINT check_anleger CHECK( XO
CREATE TABLE my_table
(
tableid NUMBER PRIMARY KEY,
foreignkey1 NUMBER,
foreignkey2 NUMBER,
CONSTRAINT check_anleger CHECK( XOR( foreignkey1 IS NULL, foreignkey2 IS NULL));
);
但不幸的是,它没有工作(得到了一个“缺少右括号”-异常,只有在我删除constraint命令时才得到解决)
XOR函数在触发器和检查约束中工作吗?Oracle数据库(与PL/SQL相反)没有布尔数据类型,因此它不支持类似XOR的逻辑函数。这意味着不能在约束中使用它。但是您可以重写条件,只需使用标准的
和,或,而不是,以及括号。触发器(大部分)是PL/SQL,所以XOR应该是可用的。但是,如果您可以使用约束而不是触发器来执行某些操作,那么这几乎总是一个更好的选择,即使代码更麻烦。谢谢!但是,当检查约束不使用布尔数据类型时,它是如何工作的呢?SQL使用隐式布尔值,但没有布尔数据类型。请参阅文档:@watchme-与“条件”在所有Oracle SQL中的工作方式相同。Oracle有逻辑“条件”,但它们不能用作“表达式”-您不能有数据类型为布尔或“逻辑”或“条件”的列。Oracle SQL中的一个恼人的区别(据我所知,在大多数商业SQL实现中也是如此)。似乎没有人完全实现的SQL标准要求支持布尔数据类型。