存储过程和函数目的是为了 可重复地 执行操作数据库的sql语句的集合。

区别是写法和调用上。

写法上:存储过程的参数列表可以有输入参数、输出参数、可输入输出的参数;

函数的参数列表只有输入参数,并且有return <返回值类型,无长度说明>。

返回值上:

    存储过程的返回值,可以有多个值,

函数的返回值,只有一个值。

调用方式上:

    存储过程的调用方式有:

1)、exec <过程名>;

2)、execute <过程名>;

3)、在PL/SQL语句块中直接调用。

函数的调用方式有:

      在PL/SQL语句块中直接调用。

具体分为:

  ----调用FUNCTION add_three_numbers

  ----1. 位置表示法调用函数

  BEGIN

  dbms_output.put_line(add_three_numbers(2,4,5));

  END;

  ----2. 命名表示法调用函数

  BEGIN

  dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));

  END;

  ----3. 混合使用位置表示法和命名表示法调用函数

  BEGIN

  dbms_output.put_line(add_three_numbers(3, b=>4,c=>2));

  END;

  ----4. 排除表示法

  BEGIN

  dbms_output.put_line(add_three_numbers(12,c=>2));

  END;

  ----5. sql调用表示法 --混合表示法

  SELECT add_three_numbers(3, b=>4,c=>2) FROM DUAL;

----1. 该函数接受3个可选参数,返回3个数字的和

  CREATE OR REPLACE FUNCTION add_three_numbers

  (

  a NUMBER:=0, b NUMBER:=0, c NUMBER:=0

  )

  RETURN NUMBER IS

  BEGIN

  RETURN a+b+c;

  END;

      

存储过程:

基本语法:

create procedure <过程名>(<参数列表,无参时忽略>)

as|is

变量声明、初始化

begin

业务处理、逻辑代码

exception

异常捕获、容错处理

end <过程名>;

参数:<参数名> in|out|in out <参数类型,无长度说明> ,如:v_name varchar2

in:入参

out:出参

in out:出入参

注:as|is表示as或is

调用语法:

1)、exec <过程名>;

2)、execute <过程名>;

3)、在PL/SQL语句块中直接调用。

例:

create or replace procedure up_wap(v_param1 in out varchar2,v_param2 in out varchar2)

is

v_temp varchar2(20);

begin

dbms_output.put_line('交换前参数1:'||v_param1||' 参数2:'||v_param2);

v_temp:=v_param1;

v_param1:=v_param2;

v_param2:=v_temp;

dbms_output.put_line('交换后参数1:'||v_param1||' 参数2:'||v_param2);

exception

when others then dbms_output.put_line('There is a error when the procedure up_wap executing!');

end up_wap;

/

-- 调用存储过程

declare

v_param1 varchar2(20):='param1';

v_param2 varchar2(20):='param2';

begin

up_wap(v_param1 => v_param1,v_param2 => v_param2);

end;

/

自定义函数(function)

基本语法:

create function <函数名>(<参数列表,无参时忽略>)

return <返回值类型,无长度说明>

as|is

变量声明、初始化

begin

业务处理、逻辑代码

return <返回的值>;

exception

异常捕获、容错处理

end <函数名>;

参数:in 入参

注:只有入参的类型。

在存储过程和自定义函数中的参数的传递(入参和出参)不能使用%type或%rowtype匹配,不能使用空值null,但是存储过程可以返回空值。

例:

create function uf_select_name_by_id_test(v_id in number)

return varchar2

is

v_name t_test.t_name%type;

begin

select t_name into v_name from t_test where t_id=v_id;

return v_name;

exception

when others then dbms_output.put_line('error');

end uf_select_name_by_id_test;

/

select uf_select_name_by_id_test(1) 姓名 from dual;-- select调用

declare --pl/sql语句块调用

v_name varchar2(20);

begin

v_name:=uf_select_name_by_id_test(1);

dbms_output.put_line('name = '||v_name);

end;

/

存储过程和函数的区别相关推荐

  1. oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别

    Oracle中存储过程和函数的区别 存储过程和函数:  www.2cto.com 例子: [sql] //创建过程 create or replace procedure add_emailinfo( ...

  2. 存储过程和函数的区别?

    存储过程和函数的区别? 1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强.存储过程,功能强大,可以执行包括修改表等一系列数据库操作:用户定义函数不能用于执行一组修改全局数据库 ...

  3. 金仓数据库KingbaseES数据库中存储过程和函数的区别

    关键字:存储过程 函数 KingbaseES数据库中存储过程和函数的区别如下表所示: 存储过程 函数 1 用于在数据库中完成特定的操作或者任务(如插入.删除等)  用于特定的数据(如选择) 2 程序头 ...

  4. 存储过程同函数的区别

          前两天面试时被面试官问到这个问题,搜肠刮肚也没有说出个所以然来.看来对数据库知识还是要时时总结归纳一下啊! 在网上找了些资料,归纳如下: 先上个图片: Oracle中差别 SQL SERV ...

  5. oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门

    文章思维导图 一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数.复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数 ...

  6. 数据库事务、存储过程、函数以及触发器之间的区别和联系

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

  7. dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

  8. mysql 存储过程与函数_12 MySQL存储过程与函数

    存储过程和函数 存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合. 调用存储过程和函数可以简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输,提高数据处理的效率. 存储过 ...

  9. 存储过程和函数——概述||创建存储过程||调用存储过程||查看存储过程||删除存储过程

    存储过程和函数概述 存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合, 调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理 ...

  10. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

    很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR ...

最新文章

  1. Metaspace 引起的 FullGC 问题排查过程及解决方案
  2. 海思前几帧图像不正常_电视有声音没有图像要怎么维修
  3. 第三次软工作业——实现最大字段和算法并进行判定条件覆盖
  4. JDK源码解析之java.util.Iterator和java.lang.Iterable
  5. (14)数据结构-二叉排序树
  6. 使用PHP,求算100-999以内的水仙花数--详细
  7. UGUI适配问题 1.UI坐标与屏幕坐标转换
  8. vue 动态加载阿里云字体图标库
  9. uniapp安卓app里拦截webview下载apk,显示下载进度
  10. HttpClient RestTemplate
  11. angular写的移动端模板《一》
  12. 【附源码】计算机毕业设计SSM七七美食汇
  13. 一文读懂Elephant Swap的LaaS方案的优势之处
  14. BTN7971电机驱动
  15. 怎么把一副图片用PS调成简笔画?
  16. Invalid regular expression: invalid group specifier name safari白屏 chrome正常
  17. 身份认证技术基础知识
  18. 云主机概念的简单介绍
  19. 大数据三个特点的理解
  20. 深入浅出IAM(1)

热门文章

  1. CSS小技巧---半透明边框
  2. QT下的音乐播放器 (一)
  3. 【爷青回系列】使用VMware虚拟机安装Windows XP系统!最详细!
  4. foobar2000播放dff格式音乐的解决办法
  5. 活动选择问题的贪心算法c语言,c语言背包问题_背包问题贪心算法_背包问题 贪心算法...
  6. Fireworks 激活序列码--网上找的 不定时无法使用
  7. cache log:minzip: zlib inflate call failed (zerr=-3)
  8. IDEA编辑器常用快捷键
  9. PyTorch Bert文本分类
  10. 基于Java+Spring+vue+element实现旅游信息管理平台系统