加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL Developer:假如存在更新,则插入穷乏右括号编译器错

发布时间:2021-03-22 12:50:50 所属栏目:站长百科 来源:网络整理
导读:我一向在实行在Oracle的SQL Developer中编写一个SQL查询,假如它存在则会更新一行,假如不存在则插入一行.除主键(UNITOFMEASURE_USERID)外,尚有三列:UNITOFMEASUREID,USERID和ACTIVE. UNITOFMEASUREID和USERID的组合存在独一束缚,因此对付每个值组合,可以有一

我一向在实行在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);

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读