SQL 存储过程

news2024/11/15 11:37:04

文章目录

    • 存储过程简介
    • 存储过程的创建及调用
    • 存储过程的删除 如何删除存储过程
    • 存储过程的优缺点

现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同
时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。

请添加图片描述

步骤:

  1. 使用SELECT语句查询新学生的老师是否存在于老师表中;
    • 如果不存在 ,则继续执行第2步;
    • 如果存在,则直接跳到第3步;
  2. 向老师表中插入老师数据;
  3. 向学生表中插入学生数据

上方需求我们可以通过存储过程实现

存储过程简介

现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同
时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据

请添加图片描述

存储过程:一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,然后通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

存储过程的创建及调用

存储过程的创建:使用关键字CREATE PROCEDURE

存储过程的删除 如何删除存储过程

比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。

CREATE PROCEDURE sp_add_student(
IN i_student_id VARCHAR(50), IN i_student_name VARCHAR(100),
IN i_gender VARCHAR(10), IN i_birth_day DATE,
IN i_age INT, IN i_class_id VARCHAR(50),
IN i_score DECIMAL(18,2), IN i_teacher_id VARCHAR(20)
)
BEGIN
IF NOT EXISTS(SELECT 1 FROM teacher WHERE teacher_id = 'i_teacher_id') THEN
INSERT INTO teacher(teacher_id) VALUES (i_teacher_id);
END IF;
INSERT INTO student VALUES(
i_student_id,i_student_name,i_gender,i_birth_day,
i_age, i_class_id, i_score, i_teacher_id
);
END;

存储过程的调用:使用关键字CALL
如:

CALL sp_add_student( 
'S20170091', '杨艳', '女', '2003-04-09',
15, 'G0206', 89.23, 'T0021' 
);

存储过程的删除:使用关键字DROP PROCEDURE
如:DROP PROCEDURE sp_add_student;

存储过程的优缺点

优点:

  • 功能强大、灵活性高;
  • 模块化,封装,代码复用;

缺点:

  • 开发调试困难;
  • 可移植性差,不同数据库,语法差别很大,移植困难;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高级IO-多路转接

高级IO 以前的都是拷贝接口。write什么的就是将字符串拷贝到发送缓冲区中。 应用层等待接收缓冲区填写数据的过程算是IO吗?算 IO等待拷贝数据; 真正的IO的过程就是拷贝的过程。比如等待鱼上钩的时候也算是钓鱼(adj),当把鱼拿上来的时候也…

【Spring篇】代理模式

🍓个人主页:个人主页 🍒系列专栏:SSM框架 目录 一、场景模拟 二、提出问题 三、代理模式 1.静态代理 2.动态代理 一、场景模拟 ①声明接口 声明计算器接口Calculator,包含加减乘除的抽象方法 public interface…

hadoop基础搭建(hadoop+hive+hbase+zk)(一)

文章目录一、基础环境&插件安装(root)二、创建启动脚本,后续使用三、安装JDK(root)四、安装Hadoop五、安装 rsync(root)六、网络配置(4台服务器,root)七、…

使用html2canvas,将页面转换成图片的采坑记录(Web/Taro h5)

使用html2canvas将页面转换成图片的采坑记录 "html2canvas": "^1.4.1","tarojs/taro": "3.4.0-beta.0"问题: 1. 生成的图片很模糊 2. 生成的图片是空白 3. 生成的图片不完整 截图前是这样 截图后这样 截图后的图片图片缺省了一部分…

【消息中间件】1小时快速上手RabbitMQ

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:深入、全面、系统的介绍消息中间件 🌰 文章简介:本文将介绍RabbitMQ,一小时快速上…

Good Bye 2022: 2023 is NEAR D. Koxia and Game

原题链接:Problem - D - Codeforces 题面: 大概意思就是给你一个数组a和数组b,你自己设计一个数组c,Koxia可以从a[i]、b[i]和c[i]中选一个,而Mahiru只能从另外两个里选一个,问你有多少个数组c一定能使Mah…

给GitHub装扮个性化首页

我的主页 如何配置 需要创建一个仓库,仓库名要跟GitHub的用户名一样,我的已经创建过了 喜欢我的主页可以直接fork然后在自己的仓库修改,如果想自己装扮直接看下一步 地址:https://github.com/linweiqian 开始装扮 下面展示仓库状态统计的设…

工业控制系统安全控制应用缩略语汇总

声明 本文是学习GB-T 32919-2016 信息安全技术 工业控制系统安全控制应用指南. 下载地址 http://github5.com/view/585而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 工业控制系统安全控制应用缩略语 ICS 工业控制系统(Industrial Contro…

线程的高效利用——线程池

文章目录线程的开销线程池的工作方式ThreadPoolExecutor基础线程池结果的处理线程的开销 线程作为一种昂贵的资源,开销包括如下几点: 1、线程的创建与启动的开销。 2、线程的销毁的开销。 3、线程调度的开销。线程的调度会产生上下文切换,从…

skywalking解析-入门

前几天从github上看最近比较火的项目,发现了skywalking,就进行了些了解,发现这个领域自己目前知之甚少,打算通过对源码的分析深入了解一下分布式追踪。首先从对skywalking介绍开始。 目录一、简介二、整体架构三、源码下载四、系统…

spark-RDD学习笔记

本文是19年学生时学习林子雨老师课程中的一些学习笔记,主要内容包括RDD的概念和运行原理,rdd相关编程api接口以及对应的实例。关于RDD的内容,这个笔记描述的2019年年底之前的pyspark版本,2023年年初时在pyspark的实际工作中rdd已经很少用或者…

【Kafka】Kafka概述

一、闲话 这是2023年的第一篇博客,祝大家在新的一年里一帆风顺,身体健康 二、基本要点 1、Kafka概述 Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要用于大数据实时处理领域 2、消息队列的好处 解耦:…

CAS原理、实践、缺陷分析及优化

文章目录CAS介绍CAS在Java中的底层实现Java源码中使用举例自己实际运用乐观锁举例简单的CAS操作ABA问题及优化实践缺陷及优化只能保证单个变量操作原子性当比较失败后,通常需要不断重试,浪费CPUCAS介绍 CAS(Compare And swap),比较并交换,是一种乐观锁.它是解决多线程并行情况…

【力扣Java】第一个出现两次的字母(HashSet与<<左移)

目录 题目描述 思路与算法 方法一&#xff1a;哈希表 HashSet说明 解题代码 方法二&#xff1a;位运算 左移运算符&#xff08;<<&#xff09; 右移运算符&#xff08;>>&#xff09; 解题代码 题目描述 给你一个由小写英文字母组成的字符串 s &#xff…

事务四大特性

没有开启事务的话直接提交、修改数据&#xff0c;有事务则进行两阶段提交&#xff1a; ①原子性 undolog 来实现一旦失败就马上触发回滚 当前事务是不可再分的&#xff0c;要么一起执行&#xff0c;要么都不执行。 start transaction redolog日志池存储undolog日志&#xff…

【Android OpenCV】Visual Studio 创建支持 OpenCV 库的 CMake 工程 ④ ( OpenCV 官方代码示例 )

文章目录一、OpenCV 官方代码示例1、Windows 平台代码示例2、Android 平台代码示例参考 【Android OpenCV】Visual Studio 创建支持 OpenCV 库的 CMake 工程 ① ( 下载 OpenCV 库 | Windows 中安装 OpenCV 库 ) 博客 , 可下载 OpenCV 库 ; CSDN 下载地址 : https://download.c…

educoder数据结构 字符串匹配 第2关:实现KMP字符串匹配

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; 任务描述 本关的编程任务是补全 step2/kmp.cpp 文件中的KmpGenNext函数&#xff0c;以实现 KMP 字符串匹配。该函数生成给定字符串的next数组。 相关知识 第 1 关中实现…

LEETCODE 19. 删除链表的倒数第 N 个结点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&#xff1a;…

shell流程控制之条件判断练习案列

练习案例1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。2、判断web服务是否运行&#xff08;1、查看进程的方式判断该程序是否运行&#xff0c;2、通过查看端口的方式判断该程序是否运行…

memcpy与memmove函数的区别和实现

1.函数定义 memcpy与memmove都是C语言的库函数&#xff0c;在头文件string.h中&#xff0c;作用是内存拷贝。唯一的区别是&#xff0c;当内存发生局部重叠时&#xff0c;memmove保证了拷贝的结果是正确的&#xff0c;但是memcopy不一定是正确的。但是memcpy比memmove速度快。 …