--用的是Oracle自带的表,编写一个过程,可以输入一个雇员名,如果该雇员名的工资低于2000,就给该雇员工资增加10%
v_sal emp.sal%type;
begin
--执行
select sal into v_sal from emp where ename=name;
--判断
if v_sal<2000 then
update emp set sal=sal+sal*10% where ename=name;
end if;
end;
警告: 创建的过程带有编译错误。SQL> show error;
PROCEDURE SP_PRO5 出现错误:LINE/COL ERROR
-------- ------------------------------
9/1      PL/SQL: SQL Statement ignored
9/30     PL/SQL: ORA-00911: 无效字符

解决方案 »

  1.   

    declare
    v_sal emp.sal%type;
    v_name varchar2(100);
    begin
    v_name:='SMITH';
    --执行
    select sal into v_sal from emp where ename=v_name;
    --判断
    if v_sal<2000 then
    update emp set sal=sal+sal*0.1 where ename=v_name;
    end if;
    end;
      

  2.   


     create or replace procedure updatesal_pro(v_name emp.ename%type)
     as
     v_sal emp.sal%type;
     begin
     --执行
     --用upper()将输入的字符转换为大写
     select sal into v_sal from emp where ename=upper(v_name);
     --判断
     if v_sal<2000 then
     update emp set sal=sal+sal*0.1 where ename=upper(v_name); --不要用10% 用0.1
     commit; --保存修改要用commit提交
     end if;
     exception --异常处理
     when no_data_found then
     dbms_output.put_line('没找到该员工!');
     when others then
     dbms_output.put_line('输入错误!');
     end;scott@YPCOST> select sal from emp where ename='MILLER';       SAL
    ----------
          1300scott@YPCOST> exec updatesal_pro('MILLER');PL/SQL 过程已成功完成。scott@YPCOST> select * from emp where ename='MILLER';     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
          7934 MILLER     CLERK           7782 1982-01-23 00:00:00       1430                    10scott@YPCOST> exec updatesal_pro('sdfsd');
    没找到该员工!PL/SQL 过程已成功完成。
      

  3.   

    你的name变量没定义,当然字符无效啊