Oracle SQL Developer:如果存在更新,则插入缺少右括号编译器错误

前端之家收集整理的这篇文章主要介绍了Oracle SQL Developer:如果存在更新,则插入缺少右括号编译器错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在尝试在Oracle的sql Developer中编写一个SQL查询,如果它存在则会更新一行,如果不存在则插入一行.除主键(UNITOFMEASURE_USERID)外,还有三列:UNITOFMEASUREID,USERID和ACTIVE. UNITOFMEASUREID和USERID的组合存在唯一约束,因此对于每个值组合,可以有一行或0.
我一直在尝试两种不同的sql安排,并且它们都返回类似的编译错误,抱怨缺少右括号.
这是我尝试过的:
第一个安排:

UPDATE NORSEMEN.UNITOFMEASURE_USER SET (ACTIVE=1) WHERE UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId
IF @@ROWCOUNT=0
    INSERT INTO NORSEMEN.UNITOFMEASURE_USER (UNITOFMEASUREID,USERID) VALUES (:unitOfMeasureId,:userId)

首次安排的sql Developer错误响应:

Error at Command Line:1 Column:46
Error report:
sql Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

第二种安排:

IF EXISTS (SELECT * FROM NORSEMEN.UNITOFMEASURE_USER WHERE UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId)
    UPDATE NORSEMEN.UNITOFMEASURE_USER SET (ACTIVE = 1) UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId
ELSE
    INSERT INTO NORSEMEN.UNITOFMEASURE_USER (UNITOFMEASUREID,:userId)

第二种安排的sql Developer错误响应:

Error at Command Line:2 Column:47
Error report:
sql Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

我无法弄清楚为什么sql Developer认为缺少括号.
有人可以帮忙吗?

解决方法

在您的情况下,如果记录匹配条件为真,则需要使用任何过程处理来更新表的活动列,或者如果不匹配则插入新记录.您可以使用 merge在单个语句中执行此操作.

merge 
 into unitofmeasure_user
using dual
  on (
      unitofmeasureid = :unitOfMeasureId AND 
      userid = :userId
     )
when matched 
then update 
        set active = 1
when not matched
then insert (unitofmeasureid,userid) 
       values (:unitOfMeasureId,:userId);

猜你在找的Oracle相关文章