2016-09-07 3 views
0

전 평생 처음 MySQL을 저장하는 함수를 작성하고 있으며,이 경험이없는 나에게도 어리석은 뭔가가 붙어 있습니다.MySQL CREATE FUNCTION 문이 WHERE 조건을 무시하는 것 같습니다.

이것은 내가 지금까지 쓴 것입니다 :이 SELECT credits_per_course(1019, 262)를 사용하여 전화

CREATE FUNCTION `credits_per_course`(COURSE_ID INT, USER_ID INT) 
RETURNS int(11) 
BEGIN 

    DECLARE users_credits INT; 

    DECLARE course_credits INT; 
    DECLARE course_mandatory_credits INT; 
    DECLARE course_total_credits INT; 

    DECLARE lessons_count INT; 

    DECLARE lessons CURSOR FOR 
      SELECT * FROM t_lessons WHERE course_id = COURSE_ID; 

    SELECT COUNT(*) INTO lessons_count FROM t_lessons WHERE course_id = COURSE_ID; 

RETURN lessons_count; 
END 

. 매직 넘버는 레슨 수와 테스트 사용자를 알 수있는 코스이며,이 시점에서 함수는 여전히 무시됩니다.

코스 1019에는 4 개의 강의가 있습니다. 이 함수를 실행하면 2462 개의 레슨이 생깁니다. 이것은 모든 레슨의 카운트입니다.

  • SELECT COUNT(*) 쿼리 후 라인 SET lessons_count = 42;을 추가하고 42 반환 :

    테스트를 위해, 나는하려

  • 99999와 같은 존재하지 않는 코스 ID를 사용하여 WHERE 절을 변경하면 올바르게 0 수업을 반환합니다.
  • WHERE 절을 명시 적으로 1019 코스 ID를 전달하지만 여전히 2462 레슨을 제공합니다.
  • 은 코스 번호가 1019 인 SELECT COUNT(*) 쿼리 외부에서 실행하려고 시도하고 4 개의 강의를 반환합니다.

내가 아마 바보 같은 실수를하고 있음을 알고 있지만, 내가하는 일을 알아낼 수 없습니다 ...

+5

매개 변수 COURSE_ID가 필드 이름 course_id와 같으므로 이름을 변경하십시오. – JohnHC

+0

너. 만든. 나의. 일. 정말 고마워! – ciamiz

+0

자체 답변 질문이나 그것을 삭제합니까? – Drew

답변

0

JohnHC는 바와 같이, 그 문제가 매개 변수 이름의 경우를 구분에 대한 나의 무지했다 .

매개 변수의 이름을 CIDUID으로 변경하면 올바르게 작동합니다.

감사합니다.