我需要将下面的代码从SQL转换为Oracle PLSQL,请帮助我
Update A
Set
A.ShiftName=@ShiftName,
A.ShiftStartTime=DATEADD(day,DATEDIFF(day,0,AttendanceDate),
CAST(S.ShiftStartTime as varchar(8))),
A.ShiftEndTime=DATEADD(day,DATEDIFF(day,case when @ShiftName='NIGHT' then -1 else 0 end ,
AttendanceDate),CAST(S.ShiftEndTime as varchar(8))),
A.ModifiedBy=@UpdatedBy,
A.ModifiedOn=GETDATE()
from Attendance A left join ShiftMaster S on S.[Shift]=@ShiftName
where AttendanceId=@AttendanceId
=========================================================================
I need to convert below code from sql to oracle PLSQL please help me
=========================================================================
UPDATE A
SET A.ShiftName = dt.ShiftName,
A.ShiftStartTime=DATEADD(day,DATEDIFF(day,0,A.AttendanceDate),CAST(S.ShiftStartTime as varchar(8))),
A.ShiftEndTime=DATEADD(day,DATEDIFF(day,case when dt.ShiftName='NIGHT' then -1 else 0 end ,A.AttendanceDate),CAST(S.ShiftEndTime as varchar(8))),
A.ModifiedBy = @UpdatedBy,
A.ModifiedOn = getdate()
from Attendance A join @dtAttendance dt on A.LoginId = dt.LoginID and A.AttendanceDate = dt.AttendanceDate
left join ShiftMaster S on S.[Shift]=dt.ShiftName
where a.AttendanceDate between getdate()-1 and dateadd(day,+30,getdate())
and A.LoginId in (Select LoginId from UserAttendanceTeam where TowerPk = @TowerPk and isActive = 'Y')
字符串
我需要将上述代码从sql转换为oracle PLSQL,请帮助我
1条答案
按热度按时间kyxcudwk1#
好吧,那是一段无效的代码;你为什么期望它能工作?
v_date
;不依赖于隐式数据类型转换(从字符串到date
)另外,请注意,包body(您发布的)需要包规范(没有它,body不能存在)。
看起来更好的代码是
字符串
现在,它取决于你传递给它的内容(所有参数都是强制性的),所以我不打算为你做这件事。CTE的工作原理是:
型
[编辑],基于您的评论:
代码
型
不会工作,因为在
DUAL
表中没有V_DATE
列。如果你使用SYSDATE
函数,它会执行,但仍然返回错误的结果(缺少当前月份的第一天),所以你必须修复它。此外,如果你想省略日期的时间部分,使用trunc(sysdate)
。另一方面,这里有一些简单的代码,你可能会感兴趣:
型