- 8
- 0
- 约5.19千字
- 约 6页
- 2021-09-26 发布于山东
- 举报
PL-SQL存储过程与函数.
PL-SQL存储过程与函数.
PAGE / NUMPAGES
PL-SQL存储过程与函数.
PL/SQL 存储过程与函数
1、存储过程
存储过程的参数
形式参数和实际参数, 例如,有如下一个存储过程, 该过程接收一个作家代码和一个工资值,将该作家的工资改为接收到的工资值。
Java 代码
1. create or replace procedure updateauths(
p_authscode auths.author_code%type,
p_authssalaryauths.salary%type)
as
begin
6.
update auths set salary=p_authssalary
where author_cod
e=p_authscode;
commit;
end updateauths;
下面的 PL/SQl 块调用 updateauths 存储过程,将代码为 A00011 的作家的工资改
为 350 元。
Java 代码
declare
v_authorcode auths.author_code%type:=A00011;
v_salary auths.salary%type:=350;
begin
updateauths(v_authorcode,v_salary);
end;
v_authorcode 、 v_salary 作为参数传递到存储过程 updateauths 中,这些参数是实际参数,简称实参。
p_authscode 、p_authssalary 就是形式参数,简称形参。
参数定义中, IN 、OUT和 IN OUT代表参数的三种不同模式:
IN :当调用存储过程时,该模式的形参接收对应实参的值,并且该是只读的,
即不能被修改。默认为 IN。
OUT:该形参被认为只能写,既只能为其赋值。在存储过程中不能读它的值。返
回时,将该形参值传给相应的实参。
IN OUT:都允许。
Java 代码
1.
create or
replace procedure updateauthssalary(
2.
p_author_code
in out auths.author_code%type,
3.
p_salary
in
number,
4.
p_name
out
auths.name%type) is
v_salary_temp number; -- 定义存储过程中的局部变量
begin
select salary into v_salary_temp from auths where au thor_code=p_author_code;
8.
if v_salary_temp300
then
9.
update auths set
salary=p_salary
where author_code
=p_author_code;
end if;
select name into p_name from auths where author cod e=p_author_code;
12.end updateauthssalary;
(1)参数的数据类型
在定义一个存储过程参数时,不能指定 CHAR类型和 VARCHAR2类型形参的长度,也不能指定 NUMBER形参的精度和标度。 这些约束由实参来传递。
例如,下面的存储过程定义不合法,将产生一个编译错误:
Java 代码
1. create or replace procedure proc_auths(
-- 参数定义了类型长度,将产生编译错误。
3.
p_code in
out
varchar2( 6),
4.
p_salary
out
number(8, 2)) as
begin
select salary into p_salary from auths where author_
code=p_code;
7. end proc_auths;
修改上面存储过程的定义为:
Java 代码
1. create or replace procedure proc_auths(
-- 参数定义了类型长度,将产生编译错误。
3.
p_code
in out
varchar2,
4.
p_salary
out
number) as
5.
begin
select salary into p_salary from auths where author_ code=p_code;
end proc_auths;
p_code 的长度约束和 p_salary 的精度,标度约束由实参传递。
原创力文档

文档评论(0)