oracle学习笔记
目录
1.什么是子程序?
pl/sql代码块取一个名字,编译并存储在数据库中,方便用户调用。
2.子程序特点
模块化: 将程序分解为逻辑模块
可重用性: 可以被任意数目的程序调用
可维护性: 简化维护操作
安全性 :通过设置权限,使数据更安全
3.子程序的分类
过程:执行某些操作流程
函数:执行操作并返回值
4.创建和使用子程序
过程
create[or replace] procedure 过程名 [(参数)]
创建过程
create or replace procedure proc_1
is -- 声明部分(变量、游标)
v_rec emp%rowtype;
begin --可执行部分
select * into v_rec from emp where empno = 7369;
dbms_output.put_line(v_rec.ename||'的薪水是:'||v_rec.sal);
end;
调用过程
begin
proc_1();
end;
查询结果
过程参数的三种模式:
IN 用于接受调用程序的值 默认的参数模式
OUT 用于向调用程序返回值
IN OUT 用于接受调用程序的值,并向调用程序返回更新的值
in参数:
--创建过程
create or replace procedure proc_2(eno in number)
is
v_rec emp%rowtype; -- 行类型
begin
select * into v_rec from emp where empno = eno;
dbms_output.put_line(v_rec.ename||'的薪水是:'||v_rec.sal);
end;
--调用过程
begin
proc_2(7499);
end;
in和out参数:
--创建过程
create or replace procedure
proc_3(e_no in number,e_sal out emp.sal%type)
is
v_rec emp%rowtype; -- 行类型
begin
select * into v_rec from emp where empno = e_no;
dbms_output.put_line(v_rec.ename);
-- 直接赋值
e_sal := v_rec.sal;
end;
--调用过程
declare
sal emp.sal%type;
begin
proc_3(7499,sal);
dbms_output.put_line('的薪水是:'||sal);
end;
inout参数:
--创建过程
create or replace procedure
proc_4(v_num in out number)
is
v_sal emp.sal%type; -- 列类型
begin
select sal into v_sal from emp where empno = v_num;
-- 直接赋值
v_num := v_sal;
end;
--调用过程
declare
val number := 7499; -- 初始值
begin
proc_4(val);
dbms_output.put_line('返回值:'||val);
end;
过程授权使用
grant execute on 过程名 to 用户名; -- 指定用户
grant execute on 过程名 to public; -- 所有用户
删除过程
drop procedure 过程名;
函数
create[or replace] function 函数名[(param1,param2)] return <datatype>
--创建函数
create or replace function fun_hello
return varchar2 -- 返回值类型
as
begin
return 'hello world!';
end;
--调用函数
select fun_hello() from dual;
5.过程和函数的区别
过 程 | 函 数 |
作为 PL/SQL 语句执行 | 作为表达式的一部分调用 |
在规格说明中不包含 RETURN 子句 | 必须在规格说明中包含 RETURN 子句 |
不返回任何值 | 必须返回单个值 |
可以包含 RETURN 语句,但是与函数不同,它不能用于返回值 | 必须包含至少一条 RETURN 语句 |