--用的是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: 无效字符
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: 无效字符
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;
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 过程已成功完成。