mysql存储过程自定义结构体_(转)MySQL存储过程/存储过程与自定义函数的区别...
转自:http://www.cnblogs.com/caoruiy/p/4486249.html
语法:
创建存储过程:
CREATE[definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristics..] routime_body
其中:
proc_parameter : [IN|OUT|INOUT] parameter_name type
其中IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;param_name表示参数名称;type表示参数的类型
存储过程体中可以使用自定义函数(UDF)中使用的复合结构/流程控制/SQL语句/自定义变量等等内容,详情参阅MySQL自定义函数用法详解-复合结构自定义变量/流程控制
调用存储过程:
CALLsp_name ([ proc_parameter [,proc_parameter ...]])
CALL sp_name
说明:当无参时,可以省略"()",当有参数时,不可省略"()"
存储过程修改:
ALTER语句修改存储过程只能修改存储过程的注释等无关紧要的东西,不能修改存储过程体,所以要修改存储过程,方法就是删除重建!
删除存储过程:
DROP PROCEDURE [IF EXISTS] sp_name
示例:
创建无参存储过程:
delimiter //
CREATE PROCEDURE showTime()
BEGIN
SELECT now();
END//
delimiter ;
CALL showTime;
作用:显示当前时间,没什么实际意义
创建含参存储过程:
只有一个IN参数
delimiter //
CREATE PROCEDURE seleById(IN uid SMALLINT UNSIGNED)
BEGIN
SELECT * FROM son WHERE id = uid;
END//
delimiter ;
call seleById(2);
包含IN参数和OUT参数
delimiter //
CREATE PROCEDURE deleteById(IN uid SMALLINT UNSIGNED, OUT num SMALLINT UNSIGNED)
BEGIN
DELETE FROM son WHERE id = uid;
SELETE row_count() into num;
END//
delimiter ;
call seleById(2,@changeLine);
SELETE @changeLine;
说明:创建存储过程deleteById,包含一个IN参数和一个OUT参数.调用时,传入删除的ID和保存被修改的行数值的用户变量@changeLine,select @changeLine;输出被影响行数.
存储过程与自定义函数的区别:
存储过程实现的过程要复杂一些,而函数的针对性较强;
存储过程可以有多个返回值,而自定义函数只有一个返回值;
存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用;
存储过程存在的必要性(好处):
存储过程说白了就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.
提高了运行速度;
同时降低网络数据传输量(你觉得传一堆SQL代码快,还是传一个存储过程名字和几个参数快???)
mysql存储过程自定义结构体_(转)MySQL存储过程/存储过程与自定义函数的区别...相关推荐
- Gin 框架学习笔记(01)— 自定义结构体绑定表单、绑定URI、自定义log、自定义中间件、路由组、解析查询字符串、上传文件、使用HTTP方法
要实现一个 API 服务器,首先要考虑两个方面:API 风格和媒体类型.Go 语言中常用的 API 风格是 RPC 和 REST,常用的媒体类型是 JSON.XML 和 Protobuf.在 Go A ...
- 【Qt】信号和槽传递自定义结构体
一.使用信号和槽传递自定义结构体 这是一个老问题了,但是每次使用都要bing,因此做个笔记整理下. 一共有三种方法,可以让结构体在信号和槽之间传递.前两种方法可以让结构体在线程之间传递,最后一种方法只 ...
- C++对自定义结构体变量排序
在C++中,如果容器中的数据类型为int double等基本类型时,我们很容易利用STL自带的函数对其进行排序,但是如果数据类型是我们自定义的结构体或者类呢,这时候再利用STL进行排序就力不从心了.在 ...
- Qt中的QByteArray和自定义结构体之间的相互转换
在Qt项目开发中,经常会碰到自定义结构体和字符数组之间的转换问题,不妨假设结构体名字为custom_struct, 字符数组名字为array_data 1. QByteArray转换为自定义结构体 c ...
- Linux内核dev_set_drvdata()和dev_get_drvdata()存储自定义结构体用法
定义位置:kernel/msm-3.18/include/linux/device.h static inline void dev_set_drvdata(struct device *dev, v ...
- QML < 5 > QML 访问C++ 类 (函数Q_INVOKABLE、枚举Q_ENUMS 、成员变量Q_PROPERTY、自定义结构体QVariantMap、List数据QVariantL
QML < 5 > QML 访问C++ 类 (函数Q_INVOKABLE.枚举Q_ENUMS .成员变量Q_PROPERTY.自定义结构体(QVariantMap ).List数据QVar ...
- STL 的 std::set 创建自定义结构体的对象,定义严格弱序的比较函数
文章目录 正文 Ref 系列地址 简 述: 对于 STL 中 std::set 创建自定义结构体的对象,发现使用 "函数对象" 和 "定义普通函数 + decltype& ...
- c语言调用dll实例 结构体传参,Matlab调用Dll,对于自定义结构体数组如何传参? - 程序语言 - 小木虫 - 学术 科研 互动社区...
%[例子1] % Matlab调用DLL,整形数组传参 v = [1,22,33;44,-56,67]; pv = libpointer('int16Ptr',v); m = get(pv,'Valu ...
- Qt中解决信号和槽不能使用自定义结构体的问题
在Qt中信号和槽使用自定义的结构时,运行的时候发现报错不能识别结构体 解决办法: 一定要将自定义结构体定义为typedef struct 使用Q_DECLARE_METATYPE(结构体名),将结构体 ...
最新文章
- iOS显示gif图片的几种方法
- Uncaught TypeError: Cannot read property 'setAttribute' of null
- 非计算机专业学习计算机
- python3 xml 取标签显示内容_如何应用“XML+XSLT”技术分离Web表示层数据和样式
- flex 3与flex 4的不同
- koa2-cookie-session
- 知识图谱论文阅读(二十)【WWW2020】Heterogeneous Graph Transformer
- Java ADF Template程序不能连接ArcGIS Server问题
- php编写数据库配置文件,通用php与mysql数据库配置文件
- python正则表达式练习题
- 使用jQuery的load方法实现div局部刷新
- Ajax案例:简易的购书网页
- lora 调制解调器计算器_如何将Android手机用作调制解调器; 无需生根
- python爬取数据+数据分析
- 物联网卡是做什么用的
- 米家扫地机器人充满电需要多长时间_【米家扫地机器人使用总结】充电|APP|清扫_摘要频道_什么值得买...
- POJ 小白算法学习 任重而道远
- 网易云/QQ音乐导入Apple Music
- 毕业设计论文 基于遥感影像的道路材质信息提取方法研究
- matlab实现通信系统,香农定理的介绍
热门文章
- 【华为云技术分享】处理器存储模型概述(1)
- 【华为云技术分享】【DevCloud•敏捷智库】读懂敏捷需求管理的4个关键词
- 【华为云技术分享】CentOS7.4系统下,手动安装MySQL5.7的方法
- 区块链学习笔记:D04 区块链在各行业领域的应用(二)
- 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(中)
- Android 短信数据库重要table字段解释
- c++语言中的循环语句有,C++语言中的循环语句
- 捋一捋20201217
- 使用vscode连接阿里云服务器报错: ssh: Could not resolve hostname Name or service not known
- android studio 横幅,有关 android studio notification 横幅弹出的功能没有反应