首页 > 数据库 >数据库存储过程

数据库存储过程

时间:2024-05-17 20:19:12浏览次数:15  
标签:语句 存储 end int 数据库 procedure 过程 select

一.什么是存储过程
存储过程是实现某个特点功能的sql语句的集合,编译后的存储过程会保存在数据中,通过存储过程的名称反复的调用执行

二.存储过程的优点
1.存储过程创建后可以反复调用和使用,不需要重新写复杂的语句
2.创建,修改存储过程不会对数据有任何影响
3.存储过程可以通过输入参数返回输出值
4.通过存储中加入控制语句,可以加强sql语句的功能性和灵活性
5.对于单个语句增删改查,可以直接封装一个集合中,存储过程一旦创建即可直接调用,且可以重复调用
6.单个sql语句没执行异常都需要对数据进行编译,而存储过程被创建只需要编译一次,后续即可调用
7.创建的存储过程,可以重复调用,可以减少数据库开发人员的工作量
8.防止sql注入
9.造数据
三.创建存储过程语句
1.带in的存储过程
delimiter //
creat procedure 存储名(参数名 in )
being
sql语句
end
//
call 存储名(参数)调用



字符串类型需要utf8

2.带out的存储的过程
delimiter //
create procedure 存储名 (参数名 out )
being
sql语句
end
//
call 存储名(参数)
select 参数

3.带inout的存储过程(既可以输入也可以输出)
delimiter //
create procedure 存储名 (参数名 inout )
being
sql语句
end
//
call 存储名(参数)
select 参数


4.带in和out的存储过程

delimiter //
create procedure 存储名 (参数名 in,参数名 out )
being
sql语句
end
//

call 存储名(参数)
select 参数

5.设置变量
方式一
set @变量名:=值
或者
set @变量名=值
select @变量名=值
方式二
select 字段 into 变量名 from 表名 where 条件
方式三
declare 声明变量
declare i int default 0

6.通过循环语句创造数据表
循环语句
(1)while ... do ... end where
格式
while 条件 do
sql语句
end while
(2)loop ... end loop
(3) repeat ....until ,,,,,,end repeat
例如创建表添加10条数据
create table f1( id int(10), name varchar(10));
delimiter//
drop procedure if EXISTS c8;
create PROCEDURE c8()
BEGIN
DECLARE i int default 0;
while (i<10) DO
insert into f1(id) VALUES(i);
set i=i+1;
END WHILE;
select * from f1 ;
end
//

call c8()

插入指定的行数
delimiter //
DROP table if EXISTS ff ;
drop procedure if exists hz10; #增强健壮性, 判断是否存在指定存储过程,如果存在就删除;
CREATE table ff(id int (10),age int(10));
create procedure hz10( in x int )
BEGIN
DECLARE i int DEFAULT 0 ;
while (i<x) DO
INSERT into ff(id )VALUES (i);
set i=i+1;
end WHILE;
select * from ff ;
END
//
call hz10(5)

call hz10(5)
指定插入的数据,并将已有的数据统计,在已有的数据基础上在添加
delimiter //
DROP table if EXISTS ff ;
drop procedure if exists hz10; #增强健壮性, 判断是否存在指定存储过程,如果存在就删除;
CREATE table ff(id int (10),age int(10));
create procedure hz10( in x int )
BEGIN
DECLARE i int DEFAULT (select Count(*) from ff ) ;
while (i<x) DO
INSERT into ff(id )VALUES (i+1);
set i=i+1;
end WHILE;
select * from ff ;
END
//

call hz10(100)

7.if语句
格式
delimiter //
create procedure c4 (in x int(10))
begin
declare i int DEFAULT(SELECT count()from student2);
if x<=i and x>0 THEN
select sum(english+math+chinese) from student2 GROUP BY class;
else if x>i then
SELECT count(
)from student2;
else
SELECT * from student2;
end if;
end if;
end
//
call c4(5)
注意每有一个else if 就要有一个end if

例如:根据student学生表去写
1.当传入的参数(大于0)小于等于表里面数据的条数时,则根据分组显示班级的总成绩
2.当传入的参数大于表里面数据的条数时,则统计表里面的数据有多少条
3.当传入其他,则查询表里面的所有数据

方法1:

delimiter //
create procedure hz09( in x int )
BEGIN
DECLARE i int DEFAULT (select Count() from student2 );
if x<=i and x>0 THEN
SELECT sum(chinese+math+english) from student2 group by class;
ELSE if x>i then
SELECT count(
) from student2;
else
select * from student2;
end if;
end if;
END
//
call hz09(6)

标签:语句,存储,end,int,数据库,procedure,过程,select
From: https://www.cnblogs.com/fanshsh/p/18198573

相关文章

  • 数据库外键
    一.什么是外键让一张表记录的数据不要太过冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化二.外键的作用保持数据的一致性和完整性三.查看存储引擎showtablestatusfrom数据库名wherename='表名'存储格式默认为MyISAM四.查看外键的方法showcreatetable......
  • mysql 存储过程
    CREATEDEFINER=`root`@`%`PROCEDURE`ProcessLargeTable`()BEGINDECLAREdoneINTDEFAULTFALSE;DECLAREcur_idBIGINT;DECLAREmax_idBIGINTDEFAULT691148169325;--设置你的最大IDDECLARElast_idBIGINTDEFAULT664476955416;--设......
  • 不同情况下,const修饰的变量存储的位置
    1前言在C语言中,const修饰的变量存储在适当的内存区域中,具体取决于变量的声明方式和作用域。2全局const变量如果const变量是在全局作用域中声明的,它将存储在静态存储区(StaticStorageArea)中。静态存储区是在程序启动时分配的,该区域中的数据在整个程序执行期间都......
  • 使用达梦客户端工具对存储过程调试
    找到存储过程,右键》调试》在新的调试编辑器调试打开界面如下:下面有个初始变量,输入所需要的参数也可以直接在存储过程写入参数P_DEMO(1001)这种参数输入好之后,点右上角绿色三角箭头开始调试选择下面的进入按钮对存储过程内部进行调试进入之后,界面如下,这样就可以选择下面标......
  • 铁威马硬盘柜D4-320:超越网盘,让数据存储更自由
    时至今日,我们越来越依赖数字数据来记录生活的点滴和工作的成果。然而,随着数据的不断累积,我们时常会遇到一个问题:网盘空间不够用。此外,网盘的安全性也是我们关注的焦点,一旦网盘服务商出现问题或数据泄露,我们的宝贵数据就可能面临丢失的风险。因此,寻找一个可靠的本地存储解决方案成......
  • 数据库(MySQL)基础
    时间:2024-05-11星期六mysql基础mysql基础学习内容MySQL数据库安装与配置、SQL基本查询、SQL写入操作、MySQL表操作、SQL高级查询、MySQL基本函数数据库分类主流关系型数据库商用数据库:DB2、Oracle开源免费数据库:MySQL、SQLServer(微软开发的,主要用于windows系统,现在也支持......
  • DataX将Oracle数据库数据同步到达梦数据库
    1.DataX3.0开源版本,rdbms里面默认是达梦7的驱动,因此,如果像链接达梦8需要替换驱动。需要将达梦8的驱动放在D:\datax\lib、D:\datax\plugin\reader\rdbmsreader\lib和D:\datax\plugin\reader\rdbmswriter\lib下D:\datax\plugin\reader\rdbmsreader\plugin.json和D:\datax\plugin\re......
  • 数据库实验一
    在stumanage数据库中,如下图建立表student:列名数据类型允许空主键说明1snoChar(8)否是学号2snameVarchar(20)是否姓名3sexChar(2)是否性别4sdeptVarchar(20)是否所在系如下图建立表:course列名数据类型允许空主键说明1cnoChar(6)否是课......
  • GreatSQL数据库DROP表后无法重建
    一、数据库信息:数据库版本:5.7.21-log某银行测试数据库,APP业务库内有一个含有大量(几百个)分区表的大表test_app。DROP该分区表的大表后导致无法重建该分区表。二、问题描述:客户使用“droptabletest_app;”时,显示表删除成功。当重新执行该表的建表语句时,报错“Table'app.test_......
  • 使用SaveChanges()更新数据库失败
    item.ModelType=TestCase.ModelType;item.TestType=TestCase.TestType;item.TestCaseType=TestCase.TestCaseType;item.TestCaseName=TestCase.TestCaseName;item.TestDescribe=TestCase.......