PL/SQL存储过程触发ORA-06550与PLS-00103错误,求排查解决方法
解决PL/SQL中的ORA-06550与PLS-00103错误
错误原因
你遇到的报错是因为存储过程的参数名avg是Oracle的保留关键字(它是聚合函数AVG()的名称),PL/SQL语法不允许将关键字直接用作标识符,解析器处理到该参数时无法正确识别,因此抛出"遇到符号')'"的错误。
修正方案
将参数名avg替换为非关键字的合法名称,比如avg_length,同时同步修改存储过程内部和调用块中的对应引用:
修正后的存储过程代码
create or replace PROCEDURE Get_StarInfo( Stars in out starsin.starname%type, cnt out integer, avg_length out float ) is begin select starname, count(title), avg(length) into Stars, cnt, avg_length from starsin, movie where movietitle=title and movieyear=year and starname=Stars group by starname; exception when others then cnt := -1; avg_length := -1; end;
修正后的调用匿名块代码
declare Stars starsin.starname%type := 'harrison ford'; cnt integer:=3; avg_length float:=3.1; begin get_starinfo(Stars,cnt,avg_length); end;
补充说明
如果非要使用类似关键字的名称,可以用双引号包裹(比如"avg"),但这种方式会增加代码复杂度,不符合常规编码规范,不推荐使用。
内容的提问来源于stack exchange,提问作者대훈조
相关产品推荐
相关产品推荐

