Sql 如何使用Oracle检查现有列是否从某个值更改为NULL
我想使用Oracle使用sql查询检查以下条件: 要检查id,用户将条件从某个值更改为另一个值 检查用户是否将条件从某个值更改为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是用户试图输入的值
(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代码来执行应用程序。