You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将SQL Server更新语句转换为Oracle SQL语句

转换后的Oracle兼容SQL语句

方式一:使用MERGE语句(适配多表关联更新场景)

MERGE INTO Attendance A
USING (SELECT ShiftStartTime, ShiftEndTime
       FROM ShiftMaster
       WHERE Shift = :ShiftName) S
ON (A.AttendanceId = :AttendanceId)
WHEN MATCHED THEN
UPDATE SET
    A.ShiftName = :ShiftName,
    A.ShiftStartTime = TRUNC(A.AttendanceDate) + 
                      (TO_DATE(S.ShiftStartTime, 'HH24:MI:SS') - TRUNC(TO_DATE(S.ShiftStartTime, 'HH24:MI:SS'))),
    A.ShiftEndTime = TRUNC(A.AttendanceDate) + 
                    CASE WHEN :ShiftName = 'NIGHT' THEN -1 ELSE 0 END +
                    (TO_DATE(S.ShiftEndTime, 'HH24:MI:SS') - TRUNC(TO_DATE(S.ShiftEndTime, 'HH24:MI:SS'))),
    A.ModifiedBy = :UpdatedBy,
    A.ModifiedOn = SYSDATE;

方式二:使用UPDATE子查询(适合单条记录更新场景)

UPDATE Attendance A
SET (ShiftName, ShiftStartTime, ShiftEndTime, ModifiedBy, ModifiedOn) =
    (SELECT :ShiftName,
            TRUNC(A.AttendanceDate) + (TO_DATE(S.ShiftStartTime, 'HH24:MI:SS') - TRUNC(TO_DATE(S.ShiftStartTime, 'HH24:MI:SS'))),
            TRUNC(A.AttendanceDate) + CASE WHEN :ShiftName = 'NIGHT' THEN -1 ELSE 0 END + (TO_DATE(S.ShiftEndTime, 'HH24:MI:SS') - TRUNC(TO_DATE(S.ShiftEndTime, 'HH24:MI:SS'))),
            :UpdatedBy,
            SYSDATE
     FROM ShiftMaster S
     WHERE S.Shift = :ShiftName)
WHERE A.AttendanceId = :AttendanceId;

关键转换细节

  • 变量格式:SQL Server的@变量名替换为Oracle标准的:变量名绑定变量格式
  • 日期截断:DATEDIFF(day, 0, AttendanceDate)(提取纯日期部分)替换为Oracle的TRUNC(AttendanceDate)
  • 日期时间拼接:原SQL中DATEADD+CAST的拼接逻辑,替换为TRUNC(日期) + 时间间隔的Oracle写法,实现日期与时间的合并
  • 当前时间函数:GETDATE()替换为Oracle的SYSDATE
  • 关联更新语法:Oracle不支持SQL Server的UPDATE ... FROM ...多表关联写法,改用MERGE或子查询方式实现相同逻辑

内容的提问来源于stack exchange,提问作者Sudhir Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:38:29