簡體   English   中英

創建存儲過程MySQL時出錯

[英]ERROR Creating Stored Procedure MySQL

我想使用phpmyadmin在MySQL數據庫中創建存儲過程。

幾分鍾后,我在“創建過程”對話框中鍵入並按GO,我的語法出現錯誤。

我在Google上搜索了哪一個是錯誤的,但仍然找不到。 請任何人給我一些建議,以解決此問題。

這是我的“ MySQL”存儲過程查詢。

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$$

我有這樣的錯誤

處理您的請求:

以下查詢失敗:“創建DEFINER = root @ % PROCEDURE USP_SelectAttendance (IN cek位(1),IN type INT,IN sdate DATETIME,IN search VARCHAR(100))NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER ..... ..

MySQL說:#1064-您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在'$$ BEGIN IF cek = 1附近使用,然后在第1行選擇a.NIK AS NIK,a.EmployeeName AS'

另外,當我在SQL中運行“ SELECT”查詢時,它運行良好。

錯誤出現在存儲過程創建中。

PS:對不起,英語不好

更改:

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

通過:

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

SQL Fiddle演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM