plsql - ERROR at line 91: PLS-00103: Encountered the symbol ";" in oracle 10g -


  create or replace procedure calculate_curve(e_year in nvarchar2,e_term in  smallint,lecture_id in nvarchar2)                                             cursor c1     select student_code, average    transcript    term=e_term , year=e_year , lecture_code=lecture_id    update;    student_id  nvarchar2(10);    avr  number;    e_grade nvarchar2(3);    aa integer;     ba integer;    bb integer;    cb integer;    cc integer;    dc integer;    dd integer;    fd integer;    avrage number(5,2);    sd number(5,2);    diff2 number(5,2);    n number(5,2);   begin    select avg(average) avrage    transcript     term=e_term , year=e_year , lecture_code=lecture_id;    select sum(power(average-avrage,2)), count(*) diff2,n    transcript     term=e_term , year=e_year , lecture_code=lecture_id;    if n>=30    n:=n-1;    end if;    select sqrt(diff2/n) sd dual;    open c1;    dbms_output.put_line(lecture_id);    aa:=avrage+2*sd;    if aa>90     aa:=90;    ba:=avrage+3*sd/2;    if ba>85    ba:=85;     bb:=avrage+sd;    if bb>80    bb:=80;     cb:=avrage+sd/2;    if cb>75    cb:=75;        cc:=avrage;    if  cc>70    cc:=70;      dc:=avrage-sd/2;    if dc>60    dc:=60;      dd:=avrage-sd;    if dd>50    dd:=50;      fd:=avrage-3*sd/2;    if fd>40    fd:=40;    loop     fetch c1 student_id,avr;    exit when c1%notfound;    if avr>=aa    e_grade:='aa';    elsif avr>=ba    e_grade:='ba';    elsif avr>=bb    e_grade:='bb';    elsif avr>=cb    e_grade:='cb';    elsif avr>=cc    e_grade:='cc';    elsif avr>=dc    e_grade:='dc';    elsif avr>=dd    e_grade:='dd';    elsif avr>=fd    e_grade:='fd';    else    e_grade:='ff';    end if;     update transcript     set grade=e_grade    term=e_term , year=e_year , lecture_code=lecture_id ,         student_code=student_id;     end loop;    close c1;   end;        

the code gives following error message: error @ line 91: pls-00103: encountered symbol ";" oracle mentions before update statement there missing semicolon.in database have transcript table has schema : id,term,lecture_code,student_code,midterm,final,average,grade. note: have examined each select statement externally giving variables needed values no error excited

you opening series of if statements don't close, if aa>90 then if fd>40 then. each of needs own end if;, after single statement following it, though it's possible intended nesting.

   aa:=avrage+2*sd;    if aa>90       aa:=90;    end if;    ba:=avrage+3*sd/2;    if ba>85      ba:=85;     end if;    bb:=avrage+sd;    ...    fd:=avrage-3*sd/2;    if fd>40      fd:=40;    end if; 

problems bit easier spot if indented code.

when final end;, compiler telling out of place. can't have plain end @ point, valid thing start end end if close 1 of if blocks opened earlier.

incidentally, use case in pace of if/elsif construct. , simplify earlier if blocks bit least function; instead of:

   aa:=avrage+2*sd;    if aa>90       aa:=90;    end if; 

you do:

    aa := least(avrage+2*sd, 90); 

Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -