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

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


记录下学习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;
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值