我想用页面项vaue更新数据库列。如果页面项为null,那么我想用从sql select query返回的值替换它。
update user
set pswd := nvl(:P10_PSWD,select pswd from user where uname=:P10_UNAME), utype=:P10_UTYPE where uname=:P10_UNAME;
我想更新column-utype和paswd。如果item:P10_PSWD为null,那么我想用现有值和utype更新pswd:P10_UTYPE。怎么做?
答案 0 :(得分:2)
此UPDATE发出请求的更改:
如果设置了绑定变量,则更新密码,如果绑定变量为NULL,则保留用户的原始密码。
update userw
set pswd = :P10_PSWD
where :P10_PSWD is not NULL and uname=:P10_UNAME;
答案 1 :(得分:2)
没有理由使用子查询;如果要使用当前行中列的值,只需使用其名称。
似乎你想要像
这样的东西update user
set pswd = nvl(:P10_PSWD, pswd), utype = :P10_UTYPE
where uname=:P10_UNAME;
但是,即使在您进行了更改后,如果您希望在所有情况下都更新utype
,或仅在:P10_PSWD
为NULL
时,仍然不清楚。无论如何,上面的UPDATE
都会更新utype
。如果您只想在:P10_PSWD
为NULL
时更新,则utype
的分配应为
..... , utype = nvl2(:P10_PSWD, utype, :P10_UTYPE)
.....
NVL2功能:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions106.htm
答案 2 :(得分:1)
您的uname=:P10_UNAME
条款中有where
个NVL
和UPDATE user
SET
pswd = NVL(:p10_pswd,pswd),
utype = :p10_utype
WHERE
uname = :p10_uname;
选择,这是不必要的,您只需使用。
AVERAGE()
答案 3 :(得分:1)
如果需要,请确保你也要处理utype值。但是它不会抛出异常而是会更新为null。我会说最好的方法是如果null然后保持现有的。然后再取决于你的要求。
update user
set pswd = nvl(:P10_PSWD,pswd),
utype = nvl(:P10_UTYPE,utype)
where uname = :P10_UNAME;