2017-12-02 9 views
0

私は間違いを理解できません。Mysqlエラー(#1064)SQL構文にエラーがあり、正しい構文が "at line 20"近くで使用されています

CREATE PROCEDURE ajoutEmprunt(nss FLOAT(15, 0), codeB INT(14), dateEm DATE) 
BEGIN 
DECLARE nbMaxBook INT; 
DECLARE nbCurrentBook INT; 
DECLARE late INT; 

    SELECT COUNT(*) INTO nbCurrentBook FROM emprunte WHERE emprunte.nssU = nss GROUP BY emprunte.nssU; 

    SELECT categorie.nbMaxOuv 
    INTO nbMaxBook 
    FROM categorie, appartient_a, utilisateur 
    WHERE categorie.idCat = appartient_a.idCat AND appartient_a.nssU=utilisateur.nssU; 

    IF EXISTS (SELECT * FROM emprunte WHERE nss = emprunte.nssU GROUP BY emprunte.nssU HAVING DATEDIFF(CURRENT_DATE, emprunte.dateLimite) < 0)) 
      THEN SET late = 1; 
    ELSE IF nbCurrentBook = 0 THEN SET late = 0; 
    END IF; 

    IF nbCurrentBook < nbMaxBook AND late = 0 
      THEN INSERT INTO emprunte(nssU, codeBarre, dateEmprunt) VALUES(nss,codeB, dateEm); 
    END IF; 
END| 

は、実際に私はこの問題は、このコードのブロックによって提起されていることを知っている:

IF EXISTS (SELECT * FROM emprunte WHERE nss = emprunte.nssU GROUP BY emprunte.nssU HAVING DATEDIFF(CURRENT_DATE, emprunte.dateLimite) < 0) 
     THEN SET retard = 1; 

しかし、私はそれを修正したり、それを交換する方法がわかりません。 あなたは何か考えているなら、それは歓迎されるでしょう!

+1

これは通常、カッコ内の不一致に関連しているので、私はそこから始めます – Strawberry

答えて

0

あなたは)あまりを持っていたし、それがELSEIFなくELSE IF

IF EXISTS (SELECT * FROM emprunte WHERE nss = emprunte.nssU GROUP BY emprunte.nssU HAVING DATEDIFF(CURRENT_DATE, emprunte.dateLimite) < 0) 
    THEN SET late = 1; 
ELSEIF nbCurrentBook = 0 
    THEN SET late = 0; 
END IF; 

であるあなたは、エラーを強調し、それが道に簡単にそれらを固定しますのMySQL WorkbenchののようなSQLツールをチェックアウトする必要があります。

+0

ありがとうございます!それは今、私は将来的にMySQL Workbenchを使用して動作します... – Jerem

関連する問題