oracle中的创建过程,函数,包

一、创建存储过程

存储过程是在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中 包的作用是什么

包的作用 封装,方便管理过程和函数。

原文地址:https://www.cnblogs.com/yanpingping/p/10846503.html

时间: 2024-10-06 18:00:41

oracle中的创建过程,函数,包的相关文章

在Oracle中如何创建带参数的视图?

本文介绍了oracle数据库中创建带参数视图的例子,有需要的朋友参考下. 在Oracle中如何创建带参数的视图? 在Oracle数据库中,视图不像存储过程和函数一样,可以定义输入参数,但可以变个方式,使用程序包来实现. 首先,定义程序包: 复制代码 代码示例: /* 按个人需要定义,我定义三个参数 ,因我项目程序需要,所以三个参数都是number ,当然可定义其它类型但切记,第二个create 的参数类型等需以第一个create一致,否则程序包创建失败*/create or replace pa

oracle link的创建过程

下面做一个测试,在测试中,创建数据库链接的库为XJ(WINDOWS 2003 ORACLE 10g 10.2.0.1),被链接的库为DMDB(LINUX AS5 ORACLE 10g 10.2.0.1 RAC)第一部分:如何创建dblinkdblink的创建有两种方式:1.在本地数据库tnsnames.ora文件中配置要访问的目标数据库信息create [public] database link test_link2connect to scott identified by tiger us

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

Oracle中chr()和ascii()函数(附:常用字符与ascii对照表)

Oracle中chr()和ascii()函数(附:常用字符与ascii对照表) 关键字:chr() chr()函数作用:"特殊"字符特殊处理 在PLSql中可查询相对应的字码与特殊符 chr()函数示例: select chr(38) from dual;  ascii()函数示例: select ascii('&') from dual;      比如"&"到底为什么在Oracle中成了特殊字符呢?经过查找,终于揭晓了答案:原来&这个字符

oracle中110个常用函数介绍

1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C --

Oracle中生成随机数的函数(转载)

在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产生一个介于0和1之间(不包含0和1)的38位精度的随机数,语法为: DBMS_RANDOM.VALUE RETURN NUMBER; 这种用法不包含参数. 2. 产生一个介于指定范围之内的38位精度的随机数,语法为: DBMS_RANDOM.VALUE(low IN NUMBER,high IN N

Java中对象创建过程

本文介绍的对象创建过程仅限于普通Java对象,不包括数组和Class对象. 1.类加载检查 虚拟机遇到一条new指令时,首先去检查该指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过. 2.为新生对象分配内存 对象所需内存的大小在类加载完成后便可以完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来.划分的方法主要有两种: a.指针碰撞 如果java堆中内存是绝对规整的,所有用过的内存都放在一边,未使用的内存放在另一

Oracle中的日期处理函数TO_DATE 和 TO_CHAR

Oracle 中的 TO_DATE 和 TO_CHAR 函数oracle 中 TO_DATE 函数的时间格式,以 2008-09-10 23:45:56 为例 格式 说明 显示值 备注 Year(年): yy two digits(两位年) 08   yyythree digits(三位年) 008   yyyy four digits(四位年) 2008 Month(月): mm number(两位月) 09   mon abbreviated(字符集表示) 9月 若是英文版, 则显示 sep

oracle中如何创建dblink

当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据.下面讲介绍如何在本地数据库中创建dblink. 创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限.想知道有关dblink的权限,以sys用户登录到本地数据库: select * from user_sys_privs t where t.privilege like upper(