PL/SQL子程序

oracle学习笔记


目录

1.什么是子程序?

2.子程序特点

3.子程序的分类

4.创建和使用子程序

过程

过程参数的三种模式:

过程授权使用

删除过程

函数

 5.过程和函数的区别


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;

  查询结果

ccfa132e2ed44d51a323788622caa207.png

过程参数的三种模式:

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;

b36def392f6a44398f7e66063e6f21ad.png

 

 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;

5ffebb0924b949d3ae1452138afc69f2.png

 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;

1cbb4bf3550a491eb8d6c84d3485a233.png

过程授权使用


 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;

c260543e0655415f881c1aef9d7437db.png

 5.过程和函数的区别

过 程

函  数

作为 PL/SQL 语句执行

作为表达式的一部分调用

在规格说明中不包含  RETURN 子句

必须在规格说明中包含 RETURN 子句

不返回任何值

必须返回单个值

可以包含 RETURN 语句,但是与函数不同,它不能用于返回值

必须包含至少一条 RETURN 语句

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值