2016-05-14 89 views
-1

我有一個問題,我不明白爲什麼我有這個錯誤..Oracle錯誤缺少右括號

的問題是在創建遊標的,但我不明白爲什麼他說,缺少一個右parentesis ...

這是我的代碼:

CREATE OR REPLACE FUNCTION classementEtudiantSemestre(p_idEtudiant IN Etudiants.idEtudiant%TYPE, p_idSemestre IN Semestres.idSemestre%TYPE) RETURN NUMBER IS 

CURSOR cur_lesmoys IS (

SELECT DISTINCT moyenneEtudiantSemestreAvecAbs(idEtudiant, idSemestre) 
FROM ETUDIANTS E 
JOIN GROUPES G ON G.idGroupe=E.idGroupe 
JOIN SEMESTRES S ON G.idPromotion = S.idPromotion 
WHERE idSemestre=p_idSemestre 
ORDER BY moyenneEtudiantSemestreAvecAbs(idEtudiant, idSemestre) DESC 


); 

u_classement NUMBER:=1; 

BEGIN 

FOR rty_lesmoys IN cur_lesmoys LOOP 

IF rty_lesmoyes.moyenneEtudiantSemestreAvecAbs(idEtudiant, idSemestre)=moyenneEtudiantSemestreAvecAbs(p_idEtudiant, p_idSemestre) THEN 
RETURN u_classement; 
ELSE 
u_classement := u_classement +1; 
END IF; 
END LOOP; 
END; 

ORACLE錯誤:

3/23 PL/SQL: SQL Statement ignored 
9/31 PL/SQL: ORA-00907: missing right parenthesis 

請幫助我..

回答

1

這項工作(即沒有括號並命名計算列)?

CURSOR cur_lesmoys IS 
SELECT DISTINCT moyenneEtudiantSemestreAvecAbs(idEtudiant, idSemestre) AS resultCol 
FROM ETUDIANTS E 
JOIN GROUPES G ON G.idGroupe=E.idGroupe 
JOIN SEMESTRES S ON G.idPromotion = S.idPromotion 
WHERE idSemestre=p_idSemestre 
ORDER BY moyenneEtudiantSemestreAvecAbs(idEtudiant, idSemestre) DESC 
; 

如果仍然沒有工作,確保此查詢的工作,你可能打錯表/列

SELECT DISTINCT moyenneEtudiantSemestreAvecAbs(idEtudiant, idSemestre) 
FROM ETUDIANTS E 
JOIN GROUPES G ON G.idGroupe=E.idGroupe 
JOIN SEMESTRES S ON G.idPromotion = S.idPromotion 
WHERE idSemestre=p_idSemestre 
ORDER BY moyenneEtudiantSemestreAvecAbs(idEtudiant, idSemestre) DESC 

這是更好地集中在第一個錯誤,第二個名稱可以往往是由第一個造成的並且令人困惑。