一、创建存储过程

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

创建存储过程的语法:

create [or replace] procedure 存储过程的名称(参数名[in/out/inout] 参数类型,参数名...)]

is/as

变量声明部分

begin

业务逻辑处理部分

exception

异常处理部分

end;

注意:

1、存储过程名称一般以pro_开头。

2、存储过程可以没有参数,如果没有参数不用加()。

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

4、过程或者函数的参数定义类型的时候,不能有精度。

例子:使用plsql声明一个存储过程,传一个员工编号的参数,返回员工的姓名和基本工资。

 我们可以使用匿名块调用存储过程:
-- 创建存储过程 输入员工编号 返回员工姓名 基本工资
create or replace procedure pro_emp_test(v_empno number,v_ename
out varchar2,v_sal out number)
is
--变量声明部分
begin
--业务逻辑处理部分
select ename ,sal into v_ename,v_sal from emp where empno=v_empno;
end;--匿名块中调用存储过程
declare
-- 声明参数用来接收出参
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
--调用存储过程
pro_emp_test(7369,v_ename,v_sal);
-- 调用过程之后 v_ename 和v_sal就有值了 可以打印结果
dbms_output.put_line('员工姓名:'||v_ename||'员工基本工资:'||v_sal);
end;

二、创建函数

创建函数和过程非常类似

语法:

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

return 返回值的类型

as/is

变量声明部分

begin

业务逻辑处理部分

return 变量/常量

exception

异常处理部分

end;

注意:同形参类型一样,返回值类型不能有精度

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

 调用函数一般使用匿名块:
create or replace function fun_random return number
is
-- 声明随机数变量
v_num number(5);
begin
--获取0到10之间的一个随机数
v_num:=trunc(dbms_random.value(0,10));
return v_num;
end;
--通过匿名块调用函数
declare
-- 声明变量接收函数的返回值
v_num number(5);
begin
-- 调用函数
v_num:=fun_random();
--打印结果
dbms_output.put_line('随机数:'||v_num);
end;

三、创建包

在开发中,如果业务逻辑比较复杂,需要定义很多过程或者函数。有可能需要定义几十个过程或者函数,这些过程或者函数如果都放到一起,不好管理,一般使用包来管理过程或者函数,一个包中可以定义多个函数或者过程。

一个包包括包和包体,需要同时定义包和包体,这种写法类似于java中的接口和接口的实现。包相当于接口,包体相当于接口的实现类。

创建包的语法:

create [or replace] package 包名 is

-- 声明常量

-- 声明函数或者过程,但是不能有实现

end;

创建包体的语法:

create [or replace ] package body 包名 is

-- 包的实现

end;

例子:定义包,计算圆的面积

定义包:

 -- 定义包 计算圆的面积
create or replace package pac_area is
-- 定义pi常量
v_pi constant number(5,2):=3.14;
--定义计算圆的面积的过程,打印圆的面procedure pro_area(v_r number);
--定义一个获取圆的面积的函数
function fun_area return number;
end;

创建包体:

 -- 定义包体,用来实现包
create or replace package body pac_area is
--把面积参数定义成包体的成员变量,这样函数也可以使用这个变量
v_area number(5,2);
-- 实现过程
procedure pro_area(v_r number) is
begin
v_area:=v_pi*v_r*v_r;
dbms_output.put_line('圆的面积是:'||v_area);
end;
--实现函数,注意,调用该函数前,一定要先调用过程
function fun_area return number ibegin
return v_area;
end;
end;调用包中的过程或者函数,在函数或者过程前加上包名就可以了:
--使用匿名块调用包中的过程和函数
declare
v_area number(5,2);
begin
-- 调用打印圆的面积的过程
pac_area.pro_area(2);
-- 调用获取圆的面积的函数
v_area :=pac_area.fun_area();
dbms_output.put_line('函数计算的圆的面积是:'||v_area);
end;

四、管理 过程、函数、包

删除:

drop procedure 过程名;

drop function 函数名;

drop package 包名;

查询oracle中定义的包,函数,过程从user_source 表查找。

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

五、面试题

一、过程和函数什么时候用

过程一般用于返回多个参数,函数一般用户返回一个参数。

二、在pl/sql中 包的作用是什么

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

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

  1. Oracle中的内置函数在sql中的转换整理

    程序里面经常会即支持Oracle数据库,又支持sql数据库.而有些Oracle内置函数用的比较多,但在sql中语法有些不同,我做了些整理,希望可以帮助大家.... 1.oracle中的内置函数:ora ...

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

    用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' repl ...

  3. Oracle中常用的系统函数

    本文主要来梳理下Oracle中的常用的系统函数,掌握这些函数的使用,对于我们编写SQL语句或PL/SQL代码时很有帮助,所以这也是必须掌握的知识点. 本文主要包括以下函数介绍:1.字符串函数2. 数值 ...

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

    在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产 ...

  5. oracle中110个常用函数介绍

    1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dua ...

  6. Oracle中生成随机数的函数

    在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产 ...

  7. Java中对象创建过程

    本文介绍的对象创建过程仅限于普通Java对象,不包括数组和Class对象. 1.类加载检查 虚拟机遇到一条new指令时,首先去检查该指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用 ...

  8. Oracle中如何使用REGEXP_SUBSTR函数

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcst ...

  9. Oracle中如何使用REGEXP_SUBSTR函数动态截取字符串

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr ...

随机推荐

  1. python中coding:utf-8的作用

    或者

  2. Nginx笔记总结十一:Nginx重写规则指南

    依赖PCRE库,需要安装pcre,最多循环10次,超过后返回500错误, 1.       rewrite模块指令 break:完成当前设置的重写规则,停止执行其他的重写规则 if:  if () { ...

  3. 关于(Building tool)的认识以及当下流行的Building tool有哪些?

    1.Building tool是什么? (Building tool)构建工具是一种工具,它负责构建流程的所有内容,并自动化与构建项目相关的所有内容.它致力于以下任务: 生成源代码(如果在软件项目中使 ...

  4. vue基础指令了解补充及组件介绍

    v-once指令 """ v-once:单独使用,限制的标签内容一旦赋值,便不可被动更改(如果是输入框,可以主动修改) """ <di ...

  5. 初等数论-Base-1(筛法求素数,欧拉函数,欧几里得算法)

    前言 初等数论在OI中应用的基础部分,同机房的AuSquare和zhou2003君早就写完了,一直划水偷懒的Hk-pls表示很方,这才开始了这篇博客. \(P.S.\)可能会分部分发表. Base-1 ...

  6. etcd安装部署步骤

    我是通过yum直接安装的(yum install etcd -y),其生成的配置文件在/etc/etcd/etcd.conf. 这里分单机版和集群版来介绍配置项 单机配置 ETCD_DATA_DIR: ...

  7. 获取网站title的脚本

    脚本在此 公司的商城需要添加一个脚本,这个脚本就是观察首页页面是否正常,虽然已经配置了zabbix监控网站是否200,但是有一些特殊的情况,比如网页可以打开但是页面是"file not fo ...

  8. hihoCoder 1128 二分查找

    Description Input and Output Codes 描述#1128 : 二分·二分查找 Description Nettle最近在玩<艦これ>,因此Nettle收集了很多 ...

  9. Sublime Text3 旧版本下载以及破解激活方式

    前言 当前Sublime Text3 出到了32**版本,以前直接输入激活码的方法已经不能使用. 而官网又不提供旧版本的下载链接,因此在此分享旧版本下载方式以及激活方式. 下载方法 通过下面这个链接下 ...

  10. Requests功能整理

    import requests # GET r = requests.get('https://api.github.com/events') # POSTr = requests.post('htt ...