1. 创建PSM函数和过程

创建过程:

CREATE PROCEDURE 名字 (参数)

局部声明;

过程体;

创建函数:

CREATE FUNCTION 名字 (参数) RETURNS 类型

局部声明;

过程体;

过程的参数:模式-名字-类型的三元组。模式有 IN, OUT, INOUT,默认为IN

函数的参数:只能是IN。

CREATE PROCEDURE Move(

IN oldAddr VARCHAR(255),

IN newAddr VARCHAR(255)

)

UPDATE MovieStar

SET address = newAddress

WHERE address = oldAddress;

2. PSM中的简单语句

2.1 调用语句:

CALL 过程名 (参数)

在宿主语言中调用形式:EXEC SQL CALL Foo(:x, 3);

作为另一个PSM中的语句

作为发送给基本SQL界面的SQL命令(不许调用函数):CALL Foo(1, 3);

2.2 返回语句:

RETURN 表达式;

只能出现在函数中,PSM的返回语句不会结束这个函数,在函数完成之前返回值都可能会改变。

2.3 局部变量声明

DECLARE 名字 类型;

2.4 赋值语句

SET 变量 = 表达式;

2.5 语句组

以分号结束,置于BEGIN和END之间

2.6 语句标号

用名字和冒号作为前缀来标识语句。

3.分支语句

IF THEN

ELSEIF THEN

ELSEIF

...

ELSE

END IF;

CREATE FUNCTION BandW(y INT, s CHAR(15)) RETURN BOOLEAN

IF NOT EXISTS(

SELECT * FROM Movies WHERE year = y AND studioName = s)

THEN RETURN TRUE;

ELSEIF 1 <=

(SELECT COUNT(*) FROM Movies WHERE year = y AND

studioName = s AND genre = 'comedy')

THEN RETURN TRUE;

ELSE RETURN FALSE;

END IF;

4. PSM中的查询

可以有多种查询方式:

①使用子查询

②返回单一值的查询可用在赋值语句的右边

③使用单元组选择语句

CREATE PROCEDURE SomeProc(IN studioName CHAR(15))

DECLARE presNetWorth INTEGER;

SELECT netWorth

INTO presNetWorth

FROM Studio, MovieExec

WHERE presC# = cert# AND Studio.name = studioName;

...

④ 声明和使用游标

语句中不需要出现EXEC SQL

局部变量不使用冒号前缀

5.PSM中的循环

LOOP

END LOOP;

中断循环: LEAVE 循环标识;

定义与SQLSTATE值相对应的条件名:

DECLARE 名字 CONDITION FOR SQLSTATE 值;

CREATE PROCEDURE MeanVar(

IN s CHAR(15),

OUT mean REAL,

OUT variance REAL

)

DECLARE Not_Found CONDITION FOR SQLSTATE '';

DECLARE MovieCursor CURSOR FOR

SELECT length FROM Movies WHERE studioName = s;

DECLARE newLength INTEGER;

DECLARE movieCount INTEGER;

BEGIN

SET mean = 0.0;

SET variance = 0.0;

SET movieCount = 0;

OPEN MovieCursor;

movieLoop: LOOP

FETCH FROM MovieCursor INTO newLength;

IF Not_Found THEN LEAVE movieLoop END IF;

SET movieCount = movieCount + 1;

SET mean = mean + newLength;

SET variance = variance + newLength * newLength;

END LOOP;

SET mean = mean / movieCount;

SET variance = variance / movieCount - mean * mean;

CLOSE MovieCursor;

END;

6.循环

FOR循环

FOR AS CURSOR FOR

DO

END FOR;

WHILE循环:

WHILE DO

END WHILE;

REPEAT循环:

REPEAT

UNTIL

END REPEAT

CREATE PROCEDURE MeanVar(

IN s CHAR(15),

OUT mean REAL,

OUT variance REAL

)

DECLARE movieCount INTEGER;

BEGIN

SET mean = 0.0;

SET variance = 0.0;

SET movieCount = 0;

FOR movieLoop AS MovieCursor CURSOR FOR

SELECT length FROM Movies WHERE studioName = s;

DO

SET movieCount = movieCount + 1;

SET mean = mean + length;

SET variance = variance + length * length;

END FOR;

SET mean = mean / movieCount;

SET variance = variance / movieCount - mean * mean;

END;

注意,在FOR循环中,用属性名表示查询结果!

7. PSM中的异常处理

DECLARE HANDLER FOR

转移的方式有下面三种:

CONTINUE:表示执行异常处理语句后,继续执行产生异常语句之后的语句

EXIT:表示执行异常处理语句后,离开异常处理的BEGIN END块,下一步执行该代码块之后的语句。

UNDO:与EXIT差不多,但是撤销已执行的该块语句对数据库和局部变化的影响。

CREATE FUNCTION GetYear(t VARCHAR(255)) RETURN INTEGER

DECLARE Not_Found CONDITION FOR SQLSTATE '';

DECLARE Too_Many CONDITION FOR SQLSTATE '';

BEGIN

DECLARE EXIT HANDLER FOR Not_Found, Too_Many

RETURN NULL;

RETURN (SELECT year FROM Movies WHERE title = t);

END;

8.使用PSM函数和过程

可以像下面这样使用

INSERT INTO StarsIn(movieTitle, movieYear, starName)

VALUES('Remember the Titans', GetYear('Remember the Titans'), 'Denzel Washington');

MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别

1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...

ASP&period;NET 工作流:支持长时间运行操作的 Web 应用程序

ASP.NET 工作流 支持长时间运行操作的 Web 应用程序 Michael Kennedy   代码下载位置:MSDN 代码库 在线浏览代码 本文将介绍以下内容: 独立于进程的工作流 同步和异步活 ...

SQL Server 2014新特性——事务持久性控制

控制事务持久性 SQL Server 2014之后事务分为2种:完全持久, 默认或延迟的持久. 完全持久,当事务被提交之后,会把事务日志写入到磁盘,完成后返回给客户端. 延迟持久,事务提交是异步的,在 ...

SQL 语言 - 数据库系统原理

SQL 发展历程 从 1970 年美国 IBM 研究中心的 E.F.Codd 发表论文到 1974 年 Boyce 和 Chamberlin 把 SQUARE 语言改为 SEQUEL 语言,到现在的 ...

看完SQL Server 2014 Q&sol;A答疑集锦&colon;想不升级都难!

看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

SQL Server 2014 新特性——内存数据库

SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

SQL Server事务、视图和索引

废话不多说,直接上干货 14:13:23 事务 概括:事务是一种机制,一个操作序列,包含一组数据库操作命令,并且把所有的命令作为一个整体一起 向系统提交或撤销操作 请求. 事务的特性:   1.原子性 ...

Microsoft SQL Server中的事务与并发详解

本篇索引: 1.事务 2.锁定和阻塞 3.隔离级别 4.死锁 一.事务 1.1 事务的概念 事务是作为单个工作单元而执行的一系列操作,比如查询和修改数据等. 事务是数据库并发控制的基本单位,一条或者一 ...

&lbrack;SQL&rsqb; SQL 基础知识梳理(四) - 数据更新

SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是

随机推荐

Windows Driver Frameworks

MSDN原文:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff557565(v=vs.85).aspx

Qt窗口的屏幕居中显示

QDesktopWidget *pDesk = QApplication::desktop(); login->move((pDesk->width() - login->width ...

&lbrack;Android Tips&rsqb; 6&period; Parallax ViewPager

文章 http://ryanhoo.github.io/blog/2014/07/16/step-by-step-implement-parallax-animation-for-splash-scr ...

js点击更多显示更多内容效果

我写了一个简单的分段显示插件,用法很简单:1,把你要分面显示的内容的容器元素增加一个class=showMoreNChildren,并增加一个自定义属性pagesize="8" 这 ...

字符串如何判断null&period;

转http://blog.sina.com.cn/s/blog_48cd37140101awgq.html Java中判断String不为空的问题 一.判断一个字符串str不为空的方法有: 1. st ...

ShadowBroker释放的NSA工具中Esteemaudit漏洞复现过程

没有时间测试呢,朋友们都成功复现,放上网盘地址:https://github.com/x0rz/EQGRP 近日臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit. ...

【Linux高频命令专题&lpar;24&rpar;】grep

简述 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则 ...

codis服务部署前的操作及初始化

1.检查服务器ipv6模块是否打开,如果打开需要禁用ipv6,防止codis-dashbord连接zookeeper失败. 因为不确定codis-dashbord服务连接zookeeper使用ipv4 ...

mysql psm 编程_【SQL】持久性存储模块PSM相关推荐

  1. mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为"参数",输出值称 ...

  2. mysql 触发器编程_【mysql的编程专题】触发器

    类似tp里面的数据模型回调接口,在数据表增删改的前或后触发执行其他的预订的sql; 一个触发器要具备4要素: 1.监视地点 -- 要执行触发器的表 2.监视事件 -- 由什么DML事件来牵引 3.触发 ...

  3. 有关数据库MySQL的演讲_有关Mysql数据库编程的文章推荐10篇

    在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Pytho ...

  4. mysql 开发规范_专业级的MySQL开发设计规范及SQL编写规范

    在团队开发过程中为了项目的稳定,代码的高效,管理的便捷制定内部种开发设计规范是必不可少的, 这里分享一份我们定义MySQL开发设计规范包括表设计规范,字段设计规范,SQL编写规范 数据库对象命名规范 ...

  5. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  6. mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)

    站在巨人的肩上 Standing On Shoulders Of Giants 部分转自:https://www.jianshu.com/p/294502893128 https://blog.csd ...

  7. mysql 廖雪峰_廖雪峰大佬SQL教程学习笔记

    1,SQL(Structured Query Language),就是访问和处理(操作)关系数据库的计算机标准语言.SQL语句既可以查询数据库中的数据,也可以添加,更新和删除数据库中的数据,还可以对数 ...

  8. MySQL数据库https接口_第三章 mysql 数据库接口程序以及SQL语句操作

    mysql  数据库接口程序以及SQL语句操作 用于管理数据库: 命令接口自带命令 DDL:数据定义语言(create drop ) DCL: 数据控制语言(grant revoke) DML: 数据 ...

  9. mysql 普通sql流程控制,【mysql的编程专题①】流程控制与其他语法

    流程控制与内置函数,一般用在select的field字段上,或者用在函数,存储过程,触发器中; 如果用在select上就会随着query出来的row来隐式迭代; 注释与语句结束符 语句结束符 默认有两 ...

最新文章

  1. mysql的profile_Mysql分析-profile详解
  2. 如何用PyTorch进行语义分割?
  3. MFC中MessageBox()用法
  4. 走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能
  5. 有关内存释放的一些问题
  6. ddr test DCD CFG file CBT
  7. Linux运维人员的前生后世!
  8. C# 多态相关的文章
  9. 论文浅尝 | PairRE: 通过成对的关系向量实现知识图谱嵌入
  10. 系统目录结构 ls命令 文件类型 alias命令
  11. android开发界面 淡出,Android 界面淡出 淡入效果
  12. CSDN下载频道1月最受欢迎资源强力推荐~!
  13. 云盘上传一直显示服务器出错_百度云盘一直服务器忙 百度网盘出现服务器错误...
  14. win10系统云服务器配置,win10系统云服务器配置
  15. 每天下午5点使用计算机结束时断开终端的连,在每天下午5点使用计算机结束时断开终端的连接属于()...
  16. Mac使用系列之软件安装权限
  17. 使用Docker提交代码参加天池比赛流程
  18. 习题6-5 使用函数验证哥德巴赫猜想 (20 point(s))
  19. 两个构件的重合点_两构件形成移动副,则两构件重合点的相对速度一定沿移动方向。...
  20. VB.NET模拟LED数字钟

热门文章

  1. 【考研】2023哈工大计算机考研854初试经验贴
  2. 【Redis7学习日记】—— 入门概述配置篇
  3. Hive教程(04)- Hive数据类型
  4. 浅谈HTTP FTP和P2P网络大文件传输的优劣势
  5. 北京何氏眼科专家:缓解眼干涩,为眼睛“加油”很重要!
  6. 江苏溧阳2021高考成绩查询,江苏溧阳中学2021年招生录取分数线
  7. Matlab中cell2mat的使用
  8. 初步开始尝试学习Shader
  9. Mysql 排序规则-大小写问题
  10. 用这个免费CDN,治愈WordPress网站加载缓慢的大难题