Jam*_*unn 4 sql oracle compiler-errors oracle-sqldeveloper
我一直在尝试在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)
Run Code Online (Sandbox Code Playgroud)
首次安排的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:
Run Code Online (Sandbox Code Playgroud)
第二种安排:
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) VALUES (:unitOfMeasureId, :userId)
Run Code Online (Sandbox Code Playgroud)
第二种安排的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:
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么SQL Developer认为缺少括号.有人可以帮忙吗?
在您的情况下,active如果记录匹配条件为真,则需要使用任何过程处理来更新表的列,如果不匹配则插入新记录.您可以使用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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8094 次 |
| 最近记录: |