数据库中存储过程、函数、触发器的区别

2023-11-11

存储过程、函数、触发器的区别

比较项目

存储过程

函数

是否有返回值

可以有,也可以没有

必须有且只有一个

是否可以单独执行

可以

必须通过execute执行

SQL语句(DMLSELECT)可否调用

不可以

可以,且可以位于FROM关键字的后面(由于可以返回表对象)

参数类型

可以使用INOUTIN OUT三种模式的参数

只有INOracle可以使用INOUTIN OUT三种参数

返回值类型

可以通过OUTIN OUT参数返回零个或多个参数值

单一值或一个表对象

1)一般来说,存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。 
2
)存储过程一般是作为一个独立的部分来执行(参照下面存储过程-调用方法),而函数可以作为查询语句的一个部分来调用(用在select后面,或者from后面)。由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

存储过程

存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。存储过程经过语法检查和编译的SQL语句,所以执行速度比普通的SQL语句的执行速度快。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

特点

1.       存储过程只在创建时进行编译,以后执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

2.       当对数据库进行复杂操作时(如对多个表进行UpdateInsertQueryDelete时),可将此复杂操作用存储过程封装起来。

3.       可以在过程中调用另一个存储过程。可以在存储过程中调用函数。这可以简化一系列复杂语句。

4.       安全性高,可设定只有某用户才具有对指定存储过程的使用权。

5.       参数有三种(INOUTIN OUT),可返回多个参数值。

6.       ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。

7.       存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

缺点

1.       不可移植性,每种数据库的内部编程语法都不太相同,当需要兼容多种数据库时,最好不要用存储过程。

2.       业务逻辑多处存在,采用存储过程后也就意味着你的系统有一些业务逻辑不是在应用程序里处理,这种架构会增加一些系统维护和调试成本。

3.       http://blog.csdn.net/next_sun/article/details/7397283

基本语法

 

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

as|is

变量声明、初始化

begin

业务处理、逻辑代码

exception

异常捕获、容错处理

end <过程名>;

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

in:入参

out:出参

in out:出入参

注:as|is表示asis

 

 

调用语法

调用语法:

1exec <过程名>;

2execute <过程名>;

3)对于Oracle数据库,可在PL/SQL语句块中直接调用。(Oracle

函数

数据库中的函数包括内置函数和自定义函数,内置函数是诸如SUM()COUNT()AVG()等数据库内置的函数。一般我们编写的函数都属于自定义函数。

特点

1.       函数只有一种参数(IN),只有一条RETURN语句,只能返回单一的值。

2.       可在SQL语句(DMLSELECT)中调用函数。由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

基本语法

 

 

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

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

as|is

变量声明、初始化

begin

业务处理、逻辑代码

return <返回的值>;

exception

异常捕获、容错处理

end <函数名>;

参数:in入参

注:只有入参的类型。

 

 

调用语法

1)在SQL语句(DMLSELECT)中调用函数 
2
)对于Oracle数据库,可在PL/SQL语句块中直接调用。(Oracle

触发器

触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行;

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库中存储过程、函数、触发器的区别 的相关文章

随机推荐

  • linux 消息队列状态:struct msqid_ds

    Linux的消息队列 queue 实质上是一个链表 它有消息队列标识符 queue ID msgget创建一个新队列或打开一个存在的队列 msgsnd向队列末端添加一条新消息 msgrcv从队列中取消息 取消息是不一定遵循先进先出的 也可以
  • 斐波那契数列应用——有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    以下一道常见的关于斐波那契数列的算法题 发现python的解法比较少 特此分享一下 首先从题目分析 得出以下结论 1 最初一对兔子是一公和一母 2 兔子三个月就能生育 3 后续生下来的兔子很标准的一夫一妻制 但是有近亲繁殖的问题 细思极恐
  • 最好用的五个黑科技搜索引擎推荐

    一 数据搜 http data chongbuluo com 数据搜 这个网站就是搜索一些热词和数据指数的 包括百度指数 阿里指数 微博指数 微信指数 搜狗指数等等 当然 还有一些汽车数据 腾讯大数据 票房数据相关数据查询网站 估计很多人经
  • 多输入多输出

    多输入多输出 MATLAB实现CNN LSTM卷积长短期记忆神经网络多输入多输出 目录 多输入多输出 MATLAB实现CNN LSTM卷积长短期记忆神经网络多输入多输出 预测效果 基本介绍 程序设计 往期精彩 参考资料 预测效果 基本介绍
  • H.264 入门篇 - 10 (帧间预测 - 参考帧列表修改/重排)

    目录 0 写在前面 1 参考帧列表修改 重排 1 1 短期参考帧的修改 1 1 1 计算 picNumLXPred 1 1 2 计算 picNumLXNoWrap 1 1 3 计算 picNumLX 1 1 4 修改参考帧列表 1 2 长期
  • redis与memcache区别

    一 redis与memcache总体对比 1 性能 Redis 只使用单核 平均每一个核上Redis在存储小数据时比Memcached性能更高 Memcached 可以使用多核 而在100k以上的数据中 Memcached性能要高于Redi
  • 开源程序识别图像像素点_开源浏览器扩展程序,可放大图像

    开源程序识别图像像素点 您是否曾经浏览过网站并希望看到更大的图像 这无时无刻不在我身上发生 要做到这一点并不总是那么容易 有时 我在源代码中进行筛选 使用Ctrl F搜索图像 复制图像源地址并将其粘贴到新窗口中 以便以全尺寸查看图像 或者
  • 深度优先遍历(DFS)和广度优先遍历(BFS)

    深度优先遍历和广度优先遍历 1 深度优先遍历 DFS 2 广度优先遍历 BFS 3 DFS与BFS算法比较 深度优先遍历简称DFS Depth First Search 广度优先遍历简称BFS Breadth First Search 它们
  • 【Linux】Linux安装搜狗输入法

    Linux安装搜狗输入法 1 安装Fcitx sudo apt install fcitx bin sudo apt get install fcitx table 2下载搜狗输入法 下载地址为 http pinyin sogou com
  • MySQL主从复制配置

    主从同步原理 准备两台机器 master 192 168 44 121 slave 192 168 44 128 如果用clone的方式得到两个MySQL服务 需要注意的地方 不同机器的UUID不能重复 否则IO线程不能启动 find na
  • Charles--01--安装和使用

    文章目录 前言 安装和破解 安装 破解 使用 连接 1 电脑端连接 2 手机端连接 问题 如何捕获本地 localhost 数据 产生原因 解决方法 前言 Charles是一款代理服务器 通过过将自己设置成系统 电脑或者浏览器 的网络访问代
  • 面向对象的语言

    面向对象的语言 面向过程和面向对象的设计思想 面向过程 procedure oriented programming 缩写POP 分析出解决问题所需的步骤 然后把步骤一部哟不实现 面向对象语言 Object Oriented Languag
  • IT项目管理大作业技术报告

    大作业项目中承担的角色 第一次团队作业项目前期研究 第一个是 中大人IT生活攻略 描述目前应用情况 另一个是 中大人的移动生活攻略 描述Program实现后的美好生活 第二次团队作业调查与研究 云或移动项目管理服务软件 竞品分析 调查Wor
  • 通过PIL打开图片并显示

    输入 from PIL import Image import matplotlib pyplot as plt pil im Image open 1 jpg pil im Image open 1 jpg convert L 灰度操作
  • Mysql中如何截取json字符串中指定片段再对其进行模糊查询--SUBSTRING_INDEX(s, delimiter, number)函数的实战运用

    应用场景 给你一个表单信息的字符串 如下 数据1 checkbox 1611194769273 Option 1 Option 2 checkbox 1611194771312 Option 2 Option 3 数据2 checkbox
  • 认识smack中的基本对象 - Registration

    一 Registration类的介绍 Registration是信息查询包IQ的子类 所以它也包含表示操作类型的四个属性 GET SET等 当其类型属性为GET时 表示从服务器获取注册对象的信息 而SET类型则表示创建用户 或者是更新已有用
  • 万能密码学习

    select userid from cms users where username 用户名 and password md5 密码 如上 如果知道用户名 注入类型为字符型使用admin and 1 1 即可完成绕过验证 数字型省去闭合即
  • build.gradle详解

    简述 1 gt java开发中有两个大名鼎鼎的项目构建ANT Maven 2 gt Google推荐使用的Android Studio是采用Gradle来构建项目的 Gradle是一个非常先进的项目构建工具 Gradle是用了一种基于Gro
  • 性能测试的基本流程

    本文主要介绍下性能测试的基本流程 性能测试从实际执行层面来看 测试的过程一般分为这么几个阶段 如下图 下面分别介绍下每个阶段具体需要做什么 一 性能需求分析 性能需求分析是整个性能测试工作开展的基础 如果连性能的需求都没弄清楚 后面的性能测
  • 数据库中存储过程、函数、触发器的区别

    存储过程 函数 触发器的区别 比较项目 存储过程 函数 是否有返回值 可以有 也可以没有 必须有且只有一个 是否可以单独执行 可以 必须通过execute执行 SQL语句 DML或SELECT 可否调用 不可以 可以 且可以位于FROM关键