2016-10-13 2 views
0
CREATE DEFINER=`root`@`localhost` PROCEDURE `EventList_SP`(
in employeeId varchar(45), 
in groupIdArray text, 
in skillIdArray text, 
in startDate date, 
in endDate date 
) 
    SET @empID = employeeId; 

    set @SQLQuery =CONCAT("SELECT groupId,eventId,scheduleId,description,events,eventType,scheduledDate,name,designation,image,skills,duration,status, 
    CASE 
     WHEN 
      scheduledDate < NOW() 
       AND (SELECT 
        COUNT(*) 
       FROM 
        event_request 
       WHERE 
        event_id = eventId 
         AND employee_code =",@empID,") > 0 
     THEN 
      1 
     WHEN 
      scheduledDate < NOW() 
       AND (SELECT 
        COUNT(*) 
       FROM 
        event_request 
       WHERE 
        event_id = eventId 
         AND employee_code =",@empID,") = 0 
     THEN 
      0 
     ELSE '' 
    END AS hasRequested, 
    (SELECT 
      actual_attendance_status_id 
     FROM 
      TJU.event_attendees_mapping 
     WHERE 
      scheduleId = event_schedule_id 
       AND employee_code =",@empID,") AS attendingStatus, 
    meetingRoom 
FROM 
    EventList_View"); 
    PREPARE stmt FROM @SQLQuery; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END 


call EventList_SP('TJU_741','','2,19', 

‚2016.09.30 10.30.00‘, ‚2016.10.19 10.30.00‘)wie innerhalb Verfahrens Wert in dynamischer Abfrage in MySQL passiert

wenn ich rufe ich erhalte Code Fehler Fehler mit wie diese dann:

  1. Unbekannte Spalte 'TJU_741' in 'where clause'

während ich will V einstellen alue

mir bitte sagen, wie Wert in dynmic Abfrage zu übergeben i Wert TJU_741-where clasue employee_code =",@empID," passieren müssen, aber ich bin immer Fehler mir bitte sagen, wo falsch tun.

+0

Immer wenn ich auch nur mäßig komplizierte Vorbereitungen mache spüle ich es immer mit einem Select-Stmt aus (und das ist es) und remis die Prepare und Exec und Dealloc aus. Also los, einfach die Saite auswerfen. Also pflüge niemals einfach zuerst in den Boden. 9 mal von 8 explodiert es. – Drew

+0

wie diesen Wert in Where-Klausel übergeben nur Tel mich @Drew –

+0

hast du gelesen, was ich gerade gesagt habe? delete die Saite mit einem Select aus und Stop! – Drew

Antwort

2

employee_code =",@empID," (x3)

Also, wenn Sie passieren ein VARCHAR, Ergebnis employee_code =TJU_ID sein wird, die eine Säule ist. Entweder ' (Anführungszeichen) wie employee_code = '",@empID,"' oder, viel sicherer (aber ich weiß nicht, wie hier, siehe MySQL Stored Procedure Prepared Statement (Dynamic SQL) Parameterized), verwenden Sie eine vorbereitete Aussage.

+0

Korrekt thanx @Xenos –

+0

@DevResearch Akzeptieren, dass gelöst (so Frage wird nicht "unbeantwortet" bleiben) – Xenos

+0

gibt es ein Problem, wenn ich versuche, Abfrage und Klausel dann Fehler angezeigt –