Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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检查现有列是否从某个值更改为NULL_Sql_Oracle - Fatal编程技术网

Sql 如何使用Oracle检查现有列是否从某个值更改为NULL

Sql 如何使用Oracle检查现有列是否从某个值更改为NULL,sql,oracle,Sql,Oracle,我想使用Oracle使用sql查询检查以下条件: 要检查id,用户将条件从某个值更改为另一个值 检查用户是否将条件从某个值更改为NULL 我正在尝试以下查询: (select count(*) from MyTable where (:userconditionid = (select condition_id from MyTable where item = :useritem)) and item = :useritem) 其中:userconditioncode是用户试图输入的值

我想使用Oracle使用sql查询检查以下条件:

要检查id,用户将条件从某个值更改为另一个值 检查用户是否将条件从某个值更改为NULL 我正在尝试以下查询:

(select count(*) from MyTable where (:userconditionid = (select condition_id from MyTable 
where item = :useritem)) 
and  item = :useritem)
其中:userconditioncode是用户试图输入的值,如果用户将条件从某个值更改为null值,则上述查询适用于正常值,但不适用于null值 上述sql查询失败

样本数据和期望结果 如果用户试图将条件_id更改为NULL 然后我必须抛出如下的am错误: 不允许用户将值更改为null

另外,如果用户试图将条件从NULL更改为其他值
然后它不应该抛出错误。

关于null的问题是,几乎所有与null的“=”比较都返回false

正确的测试不是“=”而是“为空”:

在损益表SQL中:

if :userConditionCode is null then
    throw...
或者SQL是:

(select count(*) from MyTable 
where 
( 
     (:userconditionid = (select condition_id from MyTable 
                          where item = :useritem)
     )
     or :userconditionid is null
) 
and  item = :useritem)

关于null,几乎所有与null的“=”比较都返回false

正确的测试不是“=”而是“为空”:

在损益表SQL中:

if :userConditionCode is null then
    throw...
或者SQL是:

(select count(*) from MyTable 
where 
( 
     (:userconditionid = (select condition_id from MyTable 
                          where item = :useritem)
     )
     or :userconditionid is null
) 
and  item = :useritem)

在SQL中检查null值的唯一方法是null谓词。当然,您可以将null转换为其他内容,但真正的null检查只不过是is null

这个代码适合你的需要吗?您尚未编写在没有请求的数据时应执行的操作:useritem


在SQL中检查null值的唯一方法是null谓词。当然,您可以将null转换为其他内容,但真正的null检查只不过是is null

这个代码适合你的需要吗?您尚未编写在没有请求的数据时应执行的操作:useritem


如果我正确地得到了您的所有评论,那么对您来说唯一抛出错误的情况就是当NOTNULL值试图更改为null时。考虑使用

select case when condition_id is not null and :userconditionid is null then 1 else 0 end as do_throw_error
from MyTable
where item = :useritem

在这种情况下。

如果我正确地得到了您的所有注释,那么对您抛出错误的唯一情况是尝试将NOTNULL值更改为null。考虑使用

select case when condition_id is not null and :userconditionid is null then 1 else 0 end as do_throw_error
from MyTable
where item = :useritem

在这种情况下。

请提供样本数据和所需结果。@GordonLinoff:我已经提供了样本和所需结果。请提供样本数据和所需结果。@GordonLinoff:我已经提供了样本和所需结果。但是如果为null,则正常值无效,我需要在一个查询中同时提供这两个数据。所以我检查了正常值,也检查了空值,因为已经添加了s。请参见上面的SQL示例-对此表示抱歉!正如我所说的,如果条件已经为NULL,并且用户将更改为某个值,我不想抛出错误:但是上面的sql对此失败,例如:如果从MyTable中选择count*,其中:userconditionid=从MyTable中选择条件\u id,其中item=:useritem或:userconditionid为NULL,item=:useritem=0 throw…一个错误,但我也希望如果退出值,如果条件为NULL,则不抛出错误两个预期结果:1如果用户试图将条件\u id更改为NULL,则我必须抛出am错误,如下所示:如果用户试图将条件从NULL更改为其他值,则不允许用户将值更改为NULL 2然后它不应该抛出错误。但是如果为null,则正常值无效,我需要在一个查询中同时使用这两个值。所以我检查了正常值,也检查了空值,因为已经添加了s。请参见上面的SQL示例-对此表示抱歉!正如我所说的,如果条件已经为NULL,并且用户将更改为某个值,我不想抛出错误:但是上面的sql对此失败,例如:如果从MyTable中选择count*,其中:userconditionid=从MyTable中选择条件\u id,其中item=:useritem或:userconditionid为NULL,item=:useritem=0 throw…一个错误,但我也希望如果退出值,如果条件为NULL,则不抛出错误两个预期结果:1如果用户试图将条件\u id更改为NULL,则我必须抛出am错误,如下所示:如果用户试图将条件从NULL更改为其他值,则不允许用户将值更改为NULL 2然后它不会抛出错误。@user2083356检查我的更新答案。要检查的实际情况是,用户是否尝试将NOTNULL值更新为null,因此不需要任何其他条件。但是抛出错误应该通过使用声明的错误代码而不是SELECT语句分析resultset或PL/SQL代码来执行应用程序。@user2083356检查我的更新答案。要检查的实际情况是,用户是否尝试将NOTNULL值更新为null,因此不需要任何其他条件。但是抛出错误应该通过使用声明的错误代码而不是SELECT语句分析resultset或PL/SQL代码来执行应用程序。