It seems that you have misspelled one
END IF
.
On line 26 you have
ENDIF;
while it should be
END IF;
As a side note the innermost IF looks like it's not needed. So instead of having:
DECLARE
SNO NUMBER(10):=&ENO;
SNAME VRACHAR2(10):='&ENAME';
M1 NUMBER(6):=&M1;
M2 NUMBER(6):=&M2;
M3 NUMBER(6):=&M3;
TOTAL NUMBER(6);
AVRG NUMBER(6);
RESULT VARCHAR2(6);
GRADE CHAR;
BEGIN
IF M1>40 AND M2>40 AND M3>40 THEN
RESULT:='PASS';
IF AVRG>=75 THEN
GRADE:='A';
ELSIF AVRG>=60 THEN
GRADE:='B';
IF AVRG>=45 THEN
GRADE:='C';
ELSE
GRADE:='D';
END IF;
ELSE
RESULT:='FAIL';
GRADE:='_';
END IF;
DBMS_OUTPUT.PUT_LINE('________________________________________');
DBMS_OUTPUT.PUT_LINE('SNO: ' || SNO);
DBMS_OUTPUT.PUT_LINE('SNAME:' || SNAME);
DBMS_OUTPUT.PUT_LINE('TOTAL:' || TOTAL);
DBMS_OUTPUT.PUT_LINE('AVRG:' || AVRG);
DBMS_OUTPUT.PUT_LINE('RESULT' || RESULT);
DBMS_OUTPUT.PUT_LINE('GRADE' || GRADE);
DBMS_OUTPUT.PUT_LINE('________________________________________');
END;
/
Why not simplify it to
DECLARE
SNO NUMBER(10):=&ENO;
SNAME VRACHAR2(10):='&ENAME';
M1 NUMBER(6):=&M1;
M2 NUMBER(6):=&M2;
M3 NUMBER(6):=&M3;
TOTAL NUMBER(6);
AVRG NUMBER(6);
RESULT VARCHAR2(6);
GRADE CHAR;
BEGIN
IF M1>40 AND M2>40 AND M3>40 THEN
RESULT:='PASS';
IF AVRG>=75 THEN
GRADE:='A';
ELSIF AVRG>=60 THEN
GRADE:='B';
ELSIF AVRG>=45 THEN
GRADE:='C';
ELSIF ADD_THE_CORRECT_LIMIT_HERE
GRADE:='D';
ELSE
RESULT:='FAIL';
GRADE:='_';
END IF;
DBMS_OUTPUT.PUT_LINE('________________________________________');
DBMS_OUTPUT.PUT_LINE('SNO: ' || SNO);
DBMS_OUTPUT.PUT_LINE('SNAME:' || SNAME);
DBMS_OUTPUT.PUT_LINE('TOTAL:' || TOTAL);
DBMS_OUTPUT.PUT_LINE('AVRG:' || AVRG);
DBMS_OUTPUT.PUT_LINE('RESULT' || RESULT);
DBMS_OUTPUT.PUT_LINE('GRADE' || GRADE);
DBMS_OUTPUT.PUT_LINE('________________________________________');
END;
/