首页 新闻 会员 周边

存储过程编译通过,执行却报错,这是为什么??

0
悬赏园豆:5 [已解决问题] 解决于 2016-06-04 10:14

Oracle中编写存储过程,做了个小功能,但是编译通过会有警告,然后执行报错,这是为什么???
--转账系统
create table CardTable
(
  CardID varchar2(20 byte),--账户卡号
C_Money number(12,2)--账户存款
)
--创建转账存储过程
create or REPLACE procedure sp_pro5(
MyCard varchar2,--我的卡号
YouCard varchar2,--你的卡号
TfMoney number,--转账的钱数
Pstate out varchar2--转账状态
) as
myMoney number(12,2);--记录我的余额
youMoney number(12,2);--记录你的余额
begin
  begin
--查询我的余额。操作完成后记录
select C_Money into myMoney from cardtable where CardID = MyCard;
--已记录我的余额,判断余额是否足够转账数目
if(TfMoney <= myMoney) then
--做修改操作
update CardTable set C_Money = myMoney - TfMoney where CardID = MyCard;
      update CardTable set C_Money = C_Money + TfMoney where CardID = YouCard;
      Pstate :='转账成功!';
else
      Pstate := '账户余额不足!';
end if;
--无异常,正常提交
commit;
--执行异常
exception
      when no_data_found then
      Pstate := '转账失败!'l
      rollback;
  end;
end sp_pro5;
--执行存储过程
DECLARE
  Pstate varchar2(100) := '';
  begin
  sp_pro5('6217000010032394856','6217000010032394971',200000,Pstate);
  dbms_output.put_line(Pstate);
  end;




错误如下::
在行 3 上开始执行命令时出错:
DECLARE
  Pstate varchar2(100) := '';
  begin
  sp_pro5('6217000010032394856','6217000010032394971',200,Pstate);
  dbms_output.put_line(Pstate);
  end;
错误报告:
ORA-06550: 第 4 行, 第 3 列:
PLS-00905: 对象 SCOTT.SP_PRO5 无效
ORA-06550: 第 4 行, 第 3 列:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:


有没有热心大神给解决下,感激不尽

墨流的主页 墨流 | 初学一级 | 园豆:91
提问于:2016-04-13 21:26
< >
分享
最佳答案
0

执行存储过程 exec proc

收获园豆:5
小光 | 小虾三级 |园豆:1766 | 2016-04-14 09:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册