加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle中的建设进程,函数,包

发布时间:2021-03-23 02:22:41 所属栏目:站长百科 来源:网络整理
导读:一、建设存储进程 存储进程是在oracle中存取完成特定营业逻辑的代码块。存储进程是定名块,匿名块不存在数据库中,定名块会存储到数据库中,匿名块每次运行都必要提前编译,定名块一次存储,只会编译一次。定名块可以多次行使。 ? 建设存储进程的语法: crea

一、建设存储进程

存储进程是在oracle中存取完成特定营业逻辑的代码块。存储进程是定名块,匿名块不存在数据库中,定名块会存储到数据库中,匿名块每次运行都必要提前编译,定名块一次存储,只会编译一次。定名块可以多次行使。

?

建设存储进程的语法:

create [or replace] procedure 存储进程的名称(参数名[in/out/inout] 参数范例,参数名...)]

is/as?

变量声明部门

begin

营业逻辑处理赏罚部门

exception

非常处理赏罚部门

end;

留意:

1、存储进程名称一样平常以pro_开头。

2、存储进程可以没有参数,假如没有参数不消加()。

3、进程的参数分三种,入参in出参out进出参inout假如不写,默认是in。通过界说多个出参进程可以返回多个参数。

4、进程可能函数的参数界说范例的时辰,不能有精度。

例子:行使plsql声明一个存储进程,传一个员工编号的参数,返回员工的姓名和根基人为。

 1 我们可以行使匿名块挪用存储进程:
 2 -- 建设存储进程 输入员工编号 返回员工姓名 根基人为
 3 create or replace procedure pro_emp_test(v_empno number,v_ename
 4 out varchar2,v_sal out number)
 5 is
 6 --变量声明部门
 7 begin
 8 --营业逻辑处理赏罚部门
 9 select ename,sal into v_ename,v_sal from emp where empno=v_empno;
10 end;--匿名块中挪用存储进程
11 declare
12 -- 声明参数用来吸取出参
13 v_ename emp.ename%type;
14 v_sal emp.sal%type;
15 begin
16 --挪用存储进程
17 pro_emp_test(7369,v_ename,v_sal);
18 -- 挪用进程之后 v_ename 和v_sal就有值了 可以打印功效
19 dbms_output.put_line(‘员工姓名:‘||v_ename||‘员工根基人为:‘||v_sal);
20 end;

二、建设函数

建设函数和进程很是相同

语法:

create [or replace] function 函数名[(参数名1[in/out/inout] 参数范例...)]

return 返回值的范例

as/is

变量声明部门

begin

营业逻辑处理赏罚部门

return 变量/常量

exception

非常处理赏罚部门

end;

留意:同形参范例一样,返回值范例不能有精度

例子:建设一个函数,返回0到10之间的一个随机整数

?

 1 挪用函数一样平常行使匿名块:
 2 create or replace function fun_random return number
 3 is
 4 -- 声明随机数变量
 5 v_num number(5);
 6 begin
 7 --获取0到10之间的一个随机数
 8 v_num:=trunc(dbms_random.value(0,10));
 9 return v_num;
10 end;
11 --通过匿名块挪用函数
12 declare
13 -- 声明变量吸取函数的返回值
14 v_num number(5);
15 begin
16 -- 挪用函数
17 v_num:=fun_random();
18 --打印功效
19 dbms_output.put_line(‘随机数:‘||v_num);
20 end;

?

三、建设包

在开拓中,假如营业逻辑较量伟大,必要界说许多进程可能函数。有也许必要界说几十个进程可能函数,这些进程可能函数假如都放到一路,欠好打点,一样平常行使包来打点进程可能函数,一个包中可以界说多个函数可能进程。

?

一个包包罗包和包体,必要同时界说包和包体,这种写法相同于java中的接口和接口的实现。包相等于接口,包体相等于接口的实现类。

?

建设包的语法:

create [or replace] package 包名 is

-- 声明常量

-- 声明函数可能进程,可是不能有实现

end;

?

建设包体的语法:

create [or replace ] package body 包名 is

-- 包的实现

end;

例子:界说包,计较圆的面积

界说包:

1 -- 界说包 计较圆的面积
2 create or replace package pac_area is
3 -- 界说pi常量
4 v_pi constant number(5,2):=3.14;
5 --界说计较圆的面积的进程,打印圆的面procedure pro_area(v_r number);
6 --界说一个获取圆的面积的函数
7 function fun_area return number;
8 end;

?

建设包体:

 1 -- 界说包体,用来实现包
 2 create or replace package body pac_area is
 3 --把面积参数界说成包体的成员变量,这样函数也可以行使这个变量
 4 v_area number(5,2);
 5 -- 实现进程
 6 procedure pro_area(v_r number) is
 7 begin
 8 v_area:=v_pi*v_r*v_r;
 9 dbms_output.put_line(‘圆的面积是:‘||v_area);
10 end;
11 --实现函数,留意,挪用该函数前,必然要先挪用进程
12 function fun_area return number ibegin
13 return v_area;
14 end;
15 end;挪用包中的进程可能函数,在函数可能进程前加上包名就可以了:
16 --行使匿名块挪用包中的进程和函数
17 declare
18 v_area number(5,2);
19 begin
20 -- 挪用打印圆的面积的进程
21 pac_area.pro_area(2);
22 -- 挪用获取圆的面积的函数
23 v_area :=pac_area.fun_area();
24 dbms_output.put_line(‘函数计较的圆的面积是:‘||v_area);
25 end;

?

四、打点 进程、函数、包

删除:

drop procedure 进程名;

drop function 函数名;

drop package 包名;

查询oracle中界说的包,函数,进程从user_source 表查找。

select * from user_source where type=‘PACKAGE BODY‘ and name = ‘PAC_AREA‘;

?

五、口试题

一、进程和函数什么时辰用

进程一样平常用于返回多个参数,函数一样平常用户返回一个参数。

二、在pl/sql中 包的浸染是什么

包的浸染 封装,利便打点进程和函数。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读