2014-03-28 4 views
0

phpmyadmin을 사용하여 MySQL 데이터베이스에 저장 프로 시저를 만들려고합니다.ERROR 저장 프로 시저 만들기 MySQL

몇 분 후에 "절차 만들기"대화 상자에 입력하고 GO를 누르면 구문에 오류가 있습니다.

Google에서 잘못된 정보를 검색했지만 여전히 찾을 수 없습니다. 아무도 내게이 문제를 해결하는 방법에 대한 조언을 좀주세요.

이것은 내 'MySQL'저장 프로 시저 쿼리입니다.

다음 쿼리는 실패

: "DEFINER을 만들 = root @% 절차 USP_SelectAttendance (cek BIT (1), IN IN

DELIMITER $$ 
BEGIN 
IF cek=1 THEN 
    SELECT a.NIK AS NIK 
      , a.EmployeeName AS EmployeeName 
      , a.Position AS Position 
      , b.TypeName AS EmployeeType 
      , TIME(c.EventTime) AS Datang 
      , (CASE WHEN a.TypeID=3 THEN 
        (CASE WHEN TIME(c.EventTime)>(SELECT TimeIn FROM MST_Shift 
        WHERE ShiftID=(SELECT ShiftID FROM SCH_Shifting WHERE NIK=a.NIK AND DATE(ShiftDate)=DATE(sdate) 
        AND IsActive=1 AND IsDeleted=0)) 
        THEN 'Late' ELSE 'On Time' END) 
       WHEN a.TypeID=1 OR a.TypeID=2 THEN 
        (CASE WHEN TIME(c.EventTime)>'08:15:00' THEN 'Late' ELSE 'On Time' END) 
       WHEN a.TypeID=6 OR a.TypeID=7 THEN 
        (CASE WHEN TIME(c.EventTime)>(SELECT TimeIn FROM MST_Shift 
        WHERE TypeID=a.TypeID LIMIT 1) THEN 'Late' ELSE 'On Time' END) 
       WHEN a.TypeID=5 THEN 
        (CASE WHEN TIME(c.EventTime)>(SELECT TimeIn FROM MST_Shift 
        WHERE ShiftID=(CASE WHEN DAYOFWEEK(sdate)=7 THEN 12 ELSE 11 END)) THEN 'Late' ELSE 'OnTime' END) 
       WHEN a.TypeID=4 THEN 
        (CASE WHEN TIME(c.EventTime)>(SELECT TimeIn FROM SCH_Special 
        WHERE NIK=a.NIK AND DATE(AbsenceDate)=DATE(sdate) AND IsDeleted=0) THEN 'Late' ELSE 'OnTime' END) 
       ELSE 'Undefined' END) AS Description 
    FROM MST_Employee a 
    INNER JOIN MST_EmployeeType b ON b.TypeID=a.TypeID 
    INNER JOIN VW_AttendanceIN c ON a.NIK=c.NIK 
    WHERE DATE(c.EventTime)=DATE(sdate) 
    GROUP BY b.TypeName 
      , a.Position 
      , a.EmployeeName; 
ELSE 
    SELECT a.NIK AS NIK 
      , a.EmployeeName AS EmployeeName 
      , a.Position AS Posisi 
      , b.TypeName AS Tipe 
      , TIME(c.EventTime) AS Datang 
      , (CASE WHEN a.TypeID=3 THEN 
        (CASE WHEN TIME(c.EventTime)>(SELECT TimeIn FROM MST_Shift 
        WHERE ShiftID=(SELECT ShiftID FROM SCH_Shifting WHERE NIK=a.NIK AND DATE(ShiftDate)=DATE(sdate) 
        AND IsActive=1 AND IsDeleted=0)) 
        THEN 'Late' ELSE 'On Time' END) 
       WHEN a.TypeID=1 OR a.TypeID=2 THEN 
        (CASE WHEN TIME(c.EventTime)>'08:15:00' THEN 'Late' ELSE 'On Time' END) 
       WHEN a.TypeID=6 OR a.TypeID=7 THEN 
        (CASE WHEN TIME(c.EventTime)>(SELECT TimeIn FROM MST_Shift 
        WHERE TypeID=a.TypeID LIMIT 1) THEN 'Late' ELSE 'On Time' END) 
       WHEN a.TypeID=5 THEN 
        (CASE WHEN TIME(c.EventTime)>(SELECT TimeIn FROM MST_Shift 
        WHERE ShiftID=(CASE WHEN DAYOFWEEK(sdate)=7 THEN 12 ELSE 11 END)) THEN 'Late' ELSE 'OnTime' END) 
       WHEN a.TypeID=4 THEN 
        (CASE WHEN TIME(c.EventTime)>(SELECT TimeIn FROM SCH_Special 
        WHERE NIK=a.NIK AND DATE(AbsenceDate)=DATE(sdate) AND IsDeleted=0) THEN 'Late' ELSE 'OnTime' END) 
       ELSE 'Undefined' END) AS Description 
    FROM MST_Employee a 
    INNER JOIN MST_EmployeeType b ON b.TypeID=a.TypeID 
    INNER JOIN VW_AttendanceIN c ON a.NIK=c.NIK 
    WHERE DATE(c.EventTime)=DATE(sdate) 
    AND b.TypeID=type 
    AND (a.NIK LIKE '%'+search+'%' OR a.EmployeeName LIKE '%'+key+'%') 
    GROUP BY b.TypeName 
      , a.Position 
      , a.EmployeeName; 
END IF; 
END$$ 

내가 요청을 처리하는이

같은 오류가 발생했습니다 type INT, IN sdate DATETIME, search VARCHAR (100) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER .......

MySQL은 말했다 : # 1064 - SQL 구문에 오류가 있습니다; 라인 1

또한

에 가까운 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 'CEK = 1 THEN AS NIK, a.EmployeeName AS a.NIK을 선택하면 BEGIN $$' 'SELECT'쿼리는 SQL로 실행할 때 잘 작동합니다.

저장 프로 시저 생성시 오류가 발생했습니다.

PS : 미안 해요 나쁜 영어

+3

, 포스트 여기에. –

+0

Mike W : 오류 메시지를 게시했습니다. – christ2702

답변

1

변화를위한 :

... 
AND (a.NIK LIKE '%'+search+'%' OR a.EmployeeName LIKE '%'+key+'%') 
... 

로 : 당신은 구문 오류 메시지를 받았다면

... 
AND (a.NIK LIKE CONCAT('%',search,'%') OR a.EmployeeName LIKE CONCAT('%',`key`,'%')) 
... 

SQL Fiddle demo