我正在尝试使用以下Oracle SQL语句:
update task
set t.dtdue = add_months(p.dtapplication,48)
from task t
inner join ptoprocedure p on p.idproc = t.idproc
where t.idprocess = 1017 and t.idactivity = 6
字符串
它似乎不工作,我想知道如果我使用的语法只适用于SQL Server。我发现对于Oracle,需要在更新中使用select语句,但我无法弄清楚。谢谢你的帮助
我尝试在更新内部使用select语句
3条答案
按热度按时间t3psigkw1#
您可以使用相关子查询将其重新表述为更新:
字符串
t40tm48m2#
是的,您的查询更符合SQL Server而不是Oracle。在Oracle中,你可以使用相关的subquery.you可以做如下,
字符串
这将更新任务表中的
dtdue
列,方法是从ptoprocedure表向dtapplication添加48个月,对于idprocess = 1017
和idactivity = 6
所在的行。EXISTS子句用于防止在
ptoprocedure
表中没有对应的idproc
时更新任务表中的行。如果没有此子句,则如果子查询不返回任何行,则dtdue
字段将设置为NULL
。ifmq2ha23#
如果p.idproc是唯一的(也就是说,如果它是唯一的键或主键,或者它上有唯一的索引,或者如果你使用的是Oracle 21c或更高版本,它不需要索引),那么你可以这样做:
字符串
或者如果你愿意的话
型