暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE 存储过程编译时报错PLS-00103

suger 2023-11-29
970

记录下学习Oracle中遇到的问题
报错代码:
CREATE OR REPLACE PROCEDURE SP_SCORE_PM(
p_in_stuid IN VARCHAR2(11),
p_in_courseid IN VARCHAR2,
p_out_pm OUT NUMBER
)
IS
ls_age NUMBER(5,1);
BEGIN
ls_age:=1;
dbms_output.put_line('ls_age: '||ls_age);
p_out_pm := ls_age+12;
dbms_output.put_line('asdad');
END;
 
报错信息
在左侧树中选中红叉的该过程,右键菜单—recompile referencing objects 中查看报错信息
Compilation errors for PROCEDURE STUDENT.SP_SCORE_PM
#13#10Error: PLS-00103: 出现符号 "("在需要下列之一时:
:= . ) , @ % default
character
符号 “:=” 被替换为 “(” 后继续。
Line: 2
Text: p_in_stuid IN VARCHAR2(11),

处理
反复调试后发现原来是Oracle的存储过程 参数中类型填varchar2(11)会报错,但改为了varchar后就不会报错。同理测试number改为number(5,4)也会报相同错误。说明Oracle存储过程不允许设置长度。
继续测试,发现在声明部分就可以声明变量类型为 NUMBER(5,1),varchar2(11),这个不受影响。
改为如下就不报错了

CREATE OR REPLACE PROCEDURE SP_SCORE_PM(
p_in_stuid IN VARCHAR2,
p_in_courseid IN VARCHAR2,
p_out_pm OUT NUMBER
)
IS
ls_age NUMBER(5,1);
BEGIN
ls_age:=1;
dbms_output.put_line('ls_age: '||ls_age);
p_out_pm := ls_age+12;
dbms_output.put_line('asdad');
END; 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论