CREATE or replace procedure TEST_NID(SNAME IN VARCHAR2   ,numage in number   ) 
AS  
age number;
sname1 varchar2(10);
begin
   select t.sage into age from   nidong.stafmast t where t.sname=sname;
--update nidong.stafmast t set t.sage= numage where t.sname=sname;
commit;
   dbms_output.put_line(age);
end ;注释的那句如果取消注释,则编译这个存过会是无效状态。如果注释掉那句,则编译后存过是有效状态。为什么??高人指点下啊。。我没发现我语法有错。

解决方案 »

  1.   

     t.sname=sname;变量名标识一下,最好不要和表中的列名重复没看出来有什么错误,有可能是你只有select 的权限 而没有 update的权限 ,自己查查吧。
      

  2.   

    语句本身没问题,可能是表授权的问题,你最好把报错信息贴出来。然后参数名称sname最好不要跟基表一样了。
    CREATE TABLE stafmast(sname VARCHAR2(50),sage NUMBER(5));
    INSERT INTO stafmast VALUES ('xiaoming',20);CREATE or replace procedure TEST_NID(SNAME IN VARCHAR2 ,numage in number )  
    AS   
    age number;
    sname1 varchar2(10);
    begin
      select t.sage into age from stafmast t where t.sname=sname;
      update stafmast t set t.sage= numage where t.sname=sname;
    commit;
      dbms_output.put_line(age);
    end ;
    SELECT * FROM stafmast;
    SNAME      SAGE
    xiaoming   20EXEC TEST_NID('xiaoming',35);SELECT * FROM stafmast;
    SNAME      SAGE
    xiaoming   35