Oracle创建存储过程
函数更倾向于处理数据运算,并最终返回处理结果。而存储过程更倾向于数据库操作,并不返回值。
(1)语法
create or replace procedure 存储过程名称 as
begin
存储过程定义
end 存储过程名称;
或者:
create or replace procedure 存储过程名称 as
begin
存储过程定义
end;
(2)最简单的存储过程示例
create or replace procedure test_proc as
begin
commit;
end test_proc;
/
运行后会提示存储过程创建成功。当然,这个存储过程没有具体的功能。
(3)创建存储过程,实现表emp中的每位员工工资增加2倍
对于表emp,如果需要获得有关该表的信息,如表中所有员工的姓名,应该使用自定义函数;如果需要操作表中数据,如更新某列的值,则应该使用存储过程。
更新表emp_copy中列sal值为原来的3倍的存储过程如下所示:
create or replace procedure update_sal as
begin
update emp_copy set sal = sal * 3;
commit;
end update_sal;
/
查看存储过程信息
col object_name format a15;
col object_type format a15;
col status format a15;
select object_name, object_type, status from user_objects where object_name = upper('update_sal');
OBJECT_NAME OBJECT_TYPE STATUS
--------------- --------------- ---------------
UPDATE_SAL PROCEDURE VALID
col name format a15;
col type format a15;
col line format 999;
col text format a40;
SQL> select * from user_source where name = upper('update_sal');
NAME TYPE LINE TEXT
--------------- --------------- ---- ----------------------------------------
UPDATE_SAL PROCEDURE 1 procedure update_sal as
UPDATE_SAL PROCEDURE 2 begin
UPDATE_SAL PROCEDURE 3 update emp_copy set sal = sal * 3;
UPDATE_SAL PROCEDURE 4 commit;
UPDATE_SAL PROCEDURE 5 end update_sal;
执行存储过程
方法一:
begin
update_sal;
end;
/
PL/SQL procedure successfully completed.
方法二:
execute update_sal;
PL/SQL procedure successfully completed.
执行完后用“select sal from emp_copy;”验证,发现sal数据都更新为原来的3倍。