数据库系统原理(第5章:数据库编程)

一、存储过程

概念:存储过程是一组为了完成某项特定功能的SQL语句集, 其实质就是一段存储在数据库中的代码。 它可以由声明式的sql语句和过程式sql语句组成。

特点:

  • 可增强SQL语言的功能和灵活性
  • 良好的封装性
  • 高性能
  • 可减少网络流量
  • 可作为一种安全机制来确保数据库的安全性和数据的完整性

用户定义的结束符(ELIMITER

  • ELIMITER $$:
  • 例句:将MySQL结束符修改为两个感叹号“!!”  (DELIMITER !!)

使用CREATE PROCEDURE语句创建存储过程:CREATE PROCEDURE sp_name([proc_parameter[,…]]) routine_body ;

proc_paramete:指定存储过程的参数列表

routine_body:存储过程的主体部分,也称为存储过程体

[IN | OUT | INOUT] param_name type:参数 名,参数类型

例如:在mysql_test中创建一个存储过程,用于实现给定表customers中一个客户id号即可修改表customers中该客户的性别为一个指定的性别

 

 

 

使用DECLARE语句声明局部变量:DECLARE var_name[,…] type [DEFAULT value]

例如:声明一个整型局部变量cid:   DECLARE cid INT(10);

使用DECLARE语句声明局部变量的规范

  • 1)只能在存储过程体的BEGIN…END语句块中声明;
  • 2)必须在存储过程的开头处声明;
  • 3)作用范围仅限于声明它的BEGIN…END语句块;
  • 4)不同于用户变量

局部变量与用户变量的区别:

  • 1)局部变量声明时,在其前面没有@符号,并且它只能 被声明它的BEGIN…END语句块中的语句所使用;
  • 2)用户变量在声明时,会在其名称前面使用@符号,同 时已声明的用户变量存在于整个会话之中。

使用SET语句为局部变量赋值:SET var_name=expr[,var_name=expr]…                SET cid=910;

使用SELECT…INTO语句把选定列的值直接存储到局部变量中

 

 

流程控制语句

  • 1、条件判断语句 IF…THEN …ELSE语句 CASE语句   (IF 条件 THEN 表达式1 ELSE 表达式2 END IF;)
  • 2、循环语句 WHILE语句 REPEAT语句 LOOP语句

WHILE 条件 表达式 END WHILE

repeat 表达式 END repeat

loop 表达式 END loop

ITERATE语句 用于表示退出当前循环

****************************游标CURSOR*****************************************

使用DECLARE CURSOR语句创建游标

 

 

 

使用OPEN语句打开游标:OPEN cursor_name

使用FETCH…INTO语句读取数据:

 

 

 

使用CLOSE语句关闭游标 :CLOSE cursor_name

**********************存储过程的使用************************

使用CALL语句调用存储过程

 

 

 调用数据库mysql_test中的存储过程sp_update_sex,将客户id号为909的客户性别修改为男性“M”

CALL sp_update_sex(909,’M’);

使用DROP PROCEDURE语句删除存储过程

DROP PROCEDURE[IF EXISTS] sp_name

二、存储函数

存储函数与存储过程一样,是由SQL语句和过程式语句组成的代码片段

使用CREATE FUNCTION语句创建存储函数

CREATE FUNCTION sp_name([func_parameter[,…]]) RETURNS type routine_body

  • sp_name:指定存储函数的名称
  • func_parameter:指定存储函数的参数
  • RETURNS type :声明存储函数返回值的数据类型; type指定返回值的数据类型
  •  routine_body 指定存储函数的主体部分,也称为存储函数体

在数据库mysql_test中创建 一个存储函数,要求该函数能根据 给定的客户id号返回客户的性别, 如果数据库中没有给定的客户id号 ,则返回“没有该客户”。

Use mysql_test;
DELIMITER $$
CREATE FUNCTION fn_search(cid INT)
RETURNS CHAR(20)
DETERMINISTIC
BEGIN
DECLARE SEX CHAR(20);
SELECT cust_sex INTO SEX FROM customersWHERE cust_id=cid;
IF SEX IS NULL THEN
RETURN(SELECT’没有该客户’);
ELSE IF SEX=‘F’ THEN
RETURN(SELECT’女’);ELSE RETURN(SELECT ‘男’);END IF;END IF;
END $$

 

 

 使用关键字SELECT调用存储函数:SELECT sp_name([func_parameter[, …]])

使用DROP FUNCTION语句删除存储函数:DROP FUNCTION [IF EXISTS] sp_name

转载于:https://www.cnblogs.com/jalja/p/11611440.html

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

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

相关文章

科学-中医:儒医

ylbtech-科学-中医:儒医"儒医"是一种历史悠久的社会文化现象。阐释了"儒医"的三重境界,即良医、大医、圣医。"良医"注重技,属于知识论,追求的是"真";"大医"注重德,属于道德论,追求的是"善";"圣医…

Ajax — 第六天

Ajax-06 GET和POST的区别 字面意思不同 GET 是获取意思。想从服务器获取数据,用GET方式的请求POST是邮递、邮寄意思。如果提交数据到服务器,用POST方式 请求参数位置不同 GET 请求参数会和url拼接到一起,形如 api/getbooks?id2&age3PO…

iOS Tips 模拟器屏幕截图

当我们发布app到AppStore的时候,在itunes connect里面,苹果官方要求我们提供各种尺寸的屏幕截图。由于受到硬件条件的限制,我们不可能在每个真实的物理机器上测试并截图,相反如果我们能直接在模拟器上进行屏幕截图的话&#xff0c…

数据库系统原理(第6章:数据库安全与保护)

一、数据库完整性 数据库完整性是指数据库中数据的正确性和相容性。 完整性约束条件的作用对象 列级约束: 包括对列的类型、取值范围、精度等的约束元组约束: 指元组中各个字段之间的相互约束表级约束: 指若干元组、关系之间的联系的约束定义…

.net core WebApi 使用Swagger生成API文档

关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API。Swagger 可以生成客户端SDK代码用于各种不同的平台上的实现。Swagger 文件可…

Git — 初体验

准备工作 版本管理软件 作用 记录代码的版本实现多人协作 分类 集中式,典型代表 SVN分布式,典型代表 Git 注册远程仓库账号 远程仓库相当于中央服务器我们需要在github上或码云上注册一个账号,用于创建远程仓库使用注册的时候&#xff0…

iOS CoreTelephony框架介绍与使用案列

昨晚看一篇文章时看到了私有API这个词,貌似开发者对私有API的使用很反感于是果断百度谷歌,以下是Stackoverflow中关于Private Frameworks的一个解释: Private frameworks are frameworks which you are not allowed to use. They are not exp…

JS数组的迭代器方法

迭代器forEachevery一、迭代器方法 迭代器方法, 这些方法对数组中的每一个元素应用一个函数,可以返回一个值,一组值或一个新数组。 不生成新数组的迭代器方法 1.forEach() forEach()输出 forEach输出结果2.every() 该方法按接受一个返回值为布…

Git 笔记

三个区域 下面三个区域,是Git虚拟的区域,看不到,摸不着。 工作区 工作区,指的是使用Git管理后的文件,这些文件显示在磁盘上,供我们使用或修改的区域。所以,粗略的说,项目文件夹就是…

git -- 练习的笔记

gitgitee.com:my_exercises/my_exercises.githttps://gitee.com/my_exercises/my_exercises/invite_link?invite3ab56c724a0aed34ae2bd193ce87e741e67fe05ee029cc01b7993663152babc57d76203fdafbbb42e766b0d826817bc91.在任意位置右键打开 2.初始化设置 3.添加远程仓库地址 4.…

Swift傻傻分不清楚系列(十二) 属性

本页包含内容: 存储属性(Stored Properties)计算属性(Computed Properties)属性观察器(Property Observers)全局变量和局部变量(Global and Local Variables)类型属性&a…

GIT — 使用回顾

回顾Git的使用 记录每次的变更 工作区 --> 暂存区 git add . / git add 文件 文件夹 .... 工作区 --> 暂存区/本地仓库 前提条件:文件曾经被添加到暂存区或提交到仓库git commit -a -m 提交说明 暂存区 --> 本地仓库 git commit -m 提交说明 / git commi…

Ajax — 大事件项目(第一天)

应用的前端技术 Ajax (重要) — jQuery方式接口请求Layui 框架使用HTML CSS JS 项目说明和演示 线上 DEMO 项目地址:http://www.liulongbin.top:8086/项目的 API 接口地址: https://www.showdoc.cc/escook?page_id3707158761215217 项目请求根路径…

iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

说明: 1)该文简短介绍在iOS开发中遍历字典、数组和集合的几种常见方式。 2)该文对应的代码可以在下面的地址获得:https://github.com/HanGangAndHanMeimei/Code 一、使用for循环 要遍历字典、数组或者是集合,for循环是…

Ajax — 大事件项目(第二天)

大事件-02 fix一个bug 原因: 开始做注册的时候,页面中只有一个 namepassword的input,所以 $(‘input[name“password”]’) 可以准确的找到元素后来做登录的时候,页面中多了一个namepassword的input,所以$(‘input[…

OpenCV自带dnn的Example研究(3)— object_detection

这个博客系列,简单来说,今天我们就是要研究https://docs.opencv.org/master/examples.html下的6个文件,看看在最新的OpenCV中,它们是如何发挥作用的。在配置使用的过程中,需要注意使用较高版本的VS避免编译器兼容问题&…

Ajax — 大事件项目(第三天)

大事件-03 用户信息 表单验证 html中&#xff0c;直接使用layui提供的内置验证规则 email <input type"text" name"email" required lay-verify"required|email" placeholder"请输入邮箱" autocomplete"off" class&q…

iOS运行时-使用Runtime向Category中添加属性以及运行时介绍

前言 了解OC的都应该知道&#xff0c;在一般情况下&#xff0c;我们是不能向Category中添加属性的&#xff0c;只能添加方法&#xff0c;但有些情况向&#xff0c;我们确实需要向Category中添加属性&#xff0c;而且很多系统的API也有一些在Category添加属性的情况&#xff0c;…

Git图形化管理工具

Git图形化管理工具 注意&#xff1a;必须在创建的仓库中进行右键打开 复制这段内容后打开百度网盘App&#xff0c;操作更方便哦。 链接&#xff1a;https://pan.baidu.com/s/1eXIk01LXSmzmXvYfw3MnEA 提取码&#xff1a;J166 --来自百度网盘超级会员V5的分享 分类 sourceTr…

TCP/IP(一):数据链路层

背景 这一系列的文章主要是为一般的、非专业开发岗位(如移动端)的工程师准备&#xff0c;一方面可以对网络的基本知识有基本的了解&#xff0c;另一方面不至于面试中被问到相关问题时束手无策。知识以 TCP/IP 协议簇为主&#xff0c;也会有应用层和数据链路层的简单介绍。 文…