SQL>create or replace procedure addstuscore
(
   p_xh in xs.xh%type,
   p_kcm in kc.kcm%type,
   p_cj in xs_kc.cj%type,
   p_xf in xs_kc.xf%type
)
as
   v_kch kc.kch%type;
   v_count number;
begin
   select kc.kch into v_kch from kc where kc.kcm=p_kcm;
   select count(*) into v_count from xs_kc where xs_kc.xh=p_xh and xs_kc.kch=v_kch;  if  v_count=1 then
      update xs_kc set xs_kc.cj=p_cj,xs_kc.xf=p_xf where xs_kc.xh=p_xh and xs_kc.kch=v_kch;
  else
      insert into xs_kc values(p_xh,v_kch,p_cj,p_xf);
  end if;
end; 
/   
  
SQL> exec addstuscore;
      BEGIN addstuscore;END;
            *  
      第一行出现错误:
0RA-06550:第1行,第7列:
PLS-00306:调用‘ADDSTUSCORE’时参数个数或类型错误
0RA-06550:第1行,第7行:
PL/SQL:Statement ignored
刚学oracle,不知道问题出在哪?
      

解决方案 »

  1.   

    你的过程有参数,执行需要传入参数.SQL> exec addstuscore(1,2,3,4); 
      

  2.   

    SQL> exec addstuscore(1,2,3,4); 
    我试了,说是未找到数据???
      

  3.   

    select kc.kch into v_kch from kc where kc.kcm=p_kcm; 
    带入参数到这个SQL语句里看看能不能查到数据!
      

  4.   

    顺便给你个建议insert into语句不要这么写
    insert into xs_kc values (p_xh,v_kch,p_cj,p_xf);
    改为
    insert into XS_KC(A,B,C,D)VALUES(P_XH,V_KCH,P_CJ,P_XF);
    把字段名带上!