これはPL SQLで初めて実行されたため、何らかの愚かなエラーが発生する可能性があります。 Oracle Express Edition 11gにプロシージャを作成しようとしています。私は、プロシージャ本体のWITH句と関係しているエラーに遭遇しています。エラー・プロシージャを引き起こすOracleEE 11g WITH句はコンパイルされません
私はそれを試して実行するたびに、2つのエラーが表示されます。
Error report:
ORA-06550: line 14, column 50:
PL/SQL: ORA-00918: column ambiguously defined
ORA-06550: line 12, column 7:
PL/SQL: SQL Statement ignored
ORA-06550: line 29, column 3:
PLS-00306: wrong number or types of arguments in call to 'FIND_HIGH_AVG'
ORA-06550: line 29, column 3:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
手順のコードは以下のとおりです。
DECLARE
myTerm courses.term%type;
myLine courses.lineno%type;
procedure find_high_avg (term IN courses.term%type,
line IN courses.lineno%type,
s_fname OUT students.fname%type,
s_lname OUT students.lname%type,
s_sid OUT students.side%type,
s_avg OUT number) is
begin
WITH grades as (select * from components co --line 12 here
join scores sc on co.term = sc.term and co.lineno = sc.lineno and CO.COMPNAME = SC.COMPNAME
where sc.lineno = line and sc.term = term) --line 14 here
select *
into s_fname, s_lname, s_sid, s_avg
from (
select s.fname, s.lname, s.sid, round(sum(points/maxpoints * weight),0) as AV
from grades, students
join students s on grades.sid = s.sid
group by s.sid, s.fname, s.lname
order by AV)
where rownum = 1;
end;
BEGIN
myTerm:='F12';
myLine:='1031';
find_high_avg(myTerm, myLine); --line 29 here
END;
私はその変更を行いましたが、私はコンパイラがまだ問題に遭遇しています。これを反映するように主な質問が更新されました。 – tyh
@timyh - もう少しの問題で私の答えを更新しました。 –
きれいに働いた詳細な答えをありがとうございました。これがどのように機能するかをもっとよく理解しています。 – tyh