每当我编译两个查询时,它都会显示错误,请帮助我解决

问题描述 投票:0回答:1

下面提到的查询未在 Oracle Sql 中编译,该查询有什么问题

选择出勤 ID,E.FIRSTNAME || ' ' || E.LASTNAME AS 全名、E.EmpID、E.JobCode、E.Address 作为位置、E.VSMS_Id、A.LoginId、upper(ShiftName) ShiftName,To_char(AttendanceDate, 'dd-MMM-yy') attendanceDate, to_char(出勤日期,'ddd')作为 dayName1,
TO_CHAR(ShiftStartTime,'hh:mm tt') ShiftStartTime, TO_CHAR(ShiftEndTime,'hh:mm tt') ShiftEndTime, TO_CHAR((登出、登入)/60 )|| '小时' || ':'|| SUBSTR('0' + TO_CHAR((登出,登入)%60)(2)), GREATEST(-LENGTH('0' + TO_CHAR(DATEDIFF(SignOutMinute -SignIn, SignOut)%60 AS VARCHAR2(2))), -2))||'分钟为持续时间、登录、退出、来自 T_ATTENDANCE_ATTENDANCE A 的备注
左加入 USERMASTER U ON U.LOGINID = A.LOGINID
左连接 EMPLOYEEMASTER E ON E.EMPID = U.EMPID
其中 EXTRACT(自参加日期起的年份) = V_YEAR 并且 EXTRACT(自参加日期起的月份) = V_MONTH 并且 A.active = 1
并且 a.LoginId = case when nvl(V_LoginId,'') = '' then a.LoginId else V_LoginId end
按 A.AttendanceDate ASC 订购

--------------------------------------------------------------------------------------------------------------------------------------

SELECT E.FIRSTNAME || ' ' || E.LASTNAME AS FullName, E.EmpID, E.JobCode, E.Address as Location, 
        E.VSMS_Id, A.LoginId,upper(ShiftName) ShiftName, To_char(AttendanceDate, 'dd-MMM-yy') AttendanceDate, 
        to_char(AttendanceDate, 'ddd') as dayName1,  SignIn, SignOut, 
        TO_CHAR( (SignOut -SignIn) * 1440/60 (5))|| ' Hrs' || ':'|| SUBSTR('0' + TO_CHAR( (SignOut -SignIn) * 1440%60 (2)), GREATEST(-LENGTH('0' + TO_CHAR( DATEDIFF(SignOutMinute -SignIn, SignOut) * 1440%60 AS VARCHAR2(2))), -2))||' Min' as  Duration,
        case When upper(ShiftName) = 'MORNING' then 1 
             When upper(ShiftName) = 'GENERAL1' then 2 
             When upper(ShiftName) = 'GENERAL2' then 3 
             when upper(ShiftName) = 'AFTERNOON1' then 4 
             when upper(ShiftName) = 'AFTERNOON2' then 5 
             When upper(ShiftName) = 'NIGHT' then 6
             else 7 end ShiftOrder
         FROM T_ATTENDANCE_ATTENDANCE A
        LEFT JOIN T_ATTENDANCE_USER_MASTER U  ON U.LOGINID = A.LOGINID
        LEFT JOIN T_ATTENDANCE_EMPLOYEE_MASTER E ON E.EMPID = U.EMPID       
        Join T_ATTENDANCE_USER_ATTENDANCE_TEAM uat on uat.LoginId = U.LoginID and uat.isActive = 'Y' and uat.TowerPK =
        case when nvl(V_Tower,'') = '' then '' else V_Tower end  
        and A.Active = 1
        AND ATTENDANCEDATE= V_AttendanceDate
oracle plsql oracle11g oracle-sqldeveloper
1个回答
0
投票

简单来说,那不是 Oracle。

我评论了部分代码,这些代码肯定不会工作,因为

  • 无效的日期格式掩码(有关有效选项,请参阅文档)
  • 连接运算符是双管道,而不是加号
  • 没有
    datediff
    功能
  • %60
    也是错误的;我不知道它在你使用的语言中的作用
  • Oracle中的空字符串等于NULL

我尝试尽可能多地修复它并理解。

  SELECT attendanceid,
         e.firstname || ' ' || e.lastname AS fullname,
         e.empid,
         e.jobcode,
         e.address AS location,
         e.vsms_id,
         a.loginid,
         UPPER (shiftname) shiftname,
         --
         TO_CHAR (attendancedate, 'dd-mon-yy') attendancedate,
         -- TO_CHAR (attendancedate, 'dd-MMM-yy') attendancedate,
         --
         TO_CHAR (attendancedate, 'ddd') AS dayname1,
         --
         TO_CHAR (shiftstarttime, 'hh:mi') shiftstarttime,
         -- TO_CHAR (ShiftStartTime, 'hh:mm tt') ShiftStartTime,
         --
         TO_CHAR (shiftendtime, 'hh:mi') shiftendtime,
         -- TO_CHAR (ShiftEndTime, 'hh:mm tt') ShiftEndTime,
         /*
         TO_CHAR((SignOut,SignIn)/60 )|| ' Hrs' || ':' || SUBSTR('0' || TO_CHAR( (SignOut,SignIn)%60)(2)),
         GREATEST(-LENGTH('0' + TO_CHAR(DATEDIFF(SignOutMinute -SignIn, SignOut)%60 AS VARCHAR2(2))), -2))||' Min' as Duration,
         */
         signin,
         signout,
         Remark
    FROM t_attendance_attendance a
         LEFT JOIN usermaster u ON u.loginid = a.loginid
         LEFT JOIN employeemaster e ON e.empid = u.empid
   WHERE     EXTRACT (YEAR FROM attendancedate) = v_year
         AND EXTRACT (MONTH FROM attendancedate) = v_month
         AND a.active = 1
         AND a.loginid = NVL (v_loginid, a.loginid)
             -- CASE WHEN NVL (v_loginid, '') = '' THEN a.loginid ELSE v_loginid END
ORDER BY a.attendancedate ASC;
© www.soinside.com 2019 - 2024. All rights reserved.