PL/SQL–存储过程与函数
存储过程
语法结构
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter1 [mode1] datatype1,
parameter2 [mode2] datatype2,
. . .)]
IS|AS
PL/SQL Block;
create or replace procedure GET_EMP_BY_ID
(emp_id in number,
full_name out varchar2,--参数不能给长度
salary out number)
is
begin
select first_name || '.' || last_name, salary
into full_name, salary
from employees
where employee_id = emp_id;
exception
when no_data_found then
dbms_output.put_line('没有找到数据');
end GET_EMP_BY_ID;
存储过程的调用
--存储过程的调用--
declare
v_name varchar2(20);
v_salary number;
begin
--调用方式一:必须参数对应
--get_emp_by_id(100, v_name, v_salary);
--调用方式二:可以互换参数位置
get_emp_by_id(full_name => v_name, salary => v_salary, emp_id => 40);
--调用方式三:直接写过程名称,如get_emp_by_id不要括号;会使用默认值
dbms_output.put_line('姓名:' || v_name );
dbms_output.put_line('薪水:' || v_salary );
end;
含有in out参数的存储过程
create or replace procedure ADD_SELF
(v_value in out number)
is
begin
v_value := v_value + 1;
end ADD_SELF;
含有in out参数的存储过程
declare
v_value number := 10;
begin
add_self(v_value => v_value);
dbms_output.put_line('自增结果:' || v_value);
end;
函数
create or replace function FUN_ADD_SELF
(v_value number default 0)
return number --返回类型
is
begin
return v_value + 1;--返回返回值
end FUN_ADD_SELF;
调用方式与存储过程一样
存储过程与函数的区别
1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有
2. 调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用.
3. 函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等)