你这样做不是在输入某个员工后把该员工的整个部门所有人都加薪了??另,楼上说得没错,Commit一下。

解决方案 »

  1.   

    哈哈,你UPDATE的是emp,不是etotal,而最后显示的却还是etotal,改成emp就行,不用COMMIT。declare 
       etotal  emp.empno%type;
       v_sal   emp.sal%type;
       eadd    number;
       begin
          select empno into etotal from emp where ename='&name';      if etotal.job='CLERK' then
             eadd:=500;
          elsif etotal.job='SALESMAN' then
             eadd:=1000;
          elsif etotal.job='ANALYST' then
             eadd:=1500; 
          end if;
          update emp set sal=sal+eadd where ename='&name';
          
          select sal into v_sal from emp where ename='&name';
          dbms_output.put_line('result:'||v_sal);
       end;
      

  2.   

    etotal.sal一直是个固定值,所以没有变化.
      

  3.   

    "我想显示加薪的结果.可我显示的加薪后的结果,"
    ======================
    没怎么看懂这句话,看了你的程序,觉得比如原来sal是100,现在加了500
    所以应该显示600,是这样么?
      

  4.   

    select * into etotal from emp where ename='&name';
    唯一吗?
    update emp set sal=sal+eadd where empno=etotal.empno;
    有问题.
    dbms_output.put_line('result:'||emp.sal);
      

  5.   

    dbms_output.put_line('result:'||emp.sal);
    ______________________________________________
    这样它会报错.
      

  6.   

    "我想显示加薪的结果.可我显示的加薪后的结果,"
    ======================
    没怎么看懂这句话,看了你的程序,觉得比如原来sal是100,现在加了500
    所以应该显示600,是这样么?
      

  7.   

    try:
    declare    
         etotal    emp.empno%type;  
         v_sal      emp.sal%type;  
         eadd        number;  
         begin  
               select  empno  into  etotal  from  emp  where  ename='&name';  
     
               if  etotal.job='CLERK'  then  
                     eadd:=500;  
               elsif  etotal.job='SALESMAN'  then  
                     eadd:=1000;  
               elsif  etotal.job='ANALYST'  then  
                     eadd:=1500;    
               end  if;  
               update  emp  set  sal=sal+eadd  where  ename='&name' return sal into v_sal;  
               dbms_output.put_line('result:'¦¦v_sal);  
    end;