Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
在Oracle11g中,XOR是否在触发器和检查约束中工作?_Oracle_Oracle11g_Triggers - Fatal编程技术网

在Oracle11g中,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

我试图找出是否可以在触发器和检查约束中使用XOR。我已经看过PL/SQL的实现,但还没有完全弄清楚是否可以在触发器和检查约束中使用XOR函数。 我尝试在检查约束中使用它:

 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标准要求支持布尔数据类型。