存储过程(1)----开篇
来源:互联网 发布:mac 炉石传说 插件 编辑:程序博客网 时间:2024/05/21 06:23
这几天觉得自己要研究一下存储过程,因为觉得自己数据库这块,自己也要加强一下
接下介绍自己的心得,oracle和mysql的都看过了一些,先从简单都起步
建立一个简单都存储过程
DROP PROCEDURE IF EXISTS `stu_insert`;DELIMITER ;;CREATE DEFINER=`root`@`localhost` PROCEDURE `stu_insert`()BEGIN declare i int; declare m varchar(20); set i=21; repeat set m ='wm'; set m = concat(m , i); insert into Student(id,name,address,desction,age,createTime) values(i,m,m,m,i,now()); set i=i+1;until i>23 end repeat; END;;DELIMITER ;
第一句话,建表是不是很常见。存储过程也是存放在一个地方都,这个地方oracle叫做procedures文件下,而mysql是在函数下面。
判断下stu_insert这个表是否存在,存在就drop。
DELIMITER oracle有没有我不知道,mysql 是告诉mysql 我要用;;来结束一个存储过程,因为mysql遇见;这个就结束,开始执行这个语句,所以要改掉结束语句都标志符当然DELIMITER后面都符号你可以自己定义,;;或这$$都是可以的,也是比较常见的
当然最后要把定义的结束语;;改为;不然接下来的运行的sql都会以;;为结尾
create 是创建 ,DEFINER是指明存储过程是由哪个用户定义的
PROCEDURE 是建立的存储过程的名称
BEGIN 和END是存储过程的开始和结束
declare这个定义用的,变量加一个这个
set一看功能就知道他是一个赋值功能
concat 一个string和string拼接或string和int拼接就用到这个函数:如 m="hha"+123 >> m="hha123"
1.repeat进入循环,until处理循环到跳出机制,当不满足条件就跳出循环
DROP PROCEDURE IF EXISTS `stu_insert`;DELIMITER ;;CREATE DEFINER=`root`@`localhost` PROCEDURE `stu_insert`()BEGIN #Routine body goes here... declare i int; set i=0; while i<5 do insert into Student(id,name,address,desction,age,createTime) values(i,'wm1','wm1','wm1',i,now()); set i=i+1; end while; END;;DELIMITER ;
2.while do循环,当不满足跳出循环
DROP PROCEDURE IF EXISTS `stu_insert3`;DELIMITER ;;CREATE DEFINER=`root`@`localhost` PROCEDURE `stu_insert3`()BEGIN #Routine body goes here... declare i int; declare m varchar(20); set i=21; wmdahshuaige:loop set m ='wm'; set m = concat(m , i); insert into Student(id,name,address,desction,age,createTime) values(i,m,m,m,i,now()); set i=i+1; if i>=5 then leave wmdahshuaige; end if; end loop; END;;DELIMITER ;
3.loop循环:先随便定义一个loop当名称,我这里定义的是wmdahshuaige,然后我们选择在这该loop里用一个if条件来判断是否离开循环
leave+自己定义的loop名称,就是脱离循环
DROP PROCEDURE IF EXISTS `stu_insert4`;DELIMITER ;;CREATE DEFINER=`root`@`localhost` PROCEDURE `stu_insert4`() -- 创建存储过程 begin -- 开始存储过程 declare my_id varchar(32); -- 自定义变量1 declare my_name varchar(50); -- 自定义变量2 DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认false DECLARE My_Cursor CURSOR FOR ( SELECT id, name FROM Student limit 5); -- 定义游标并输入结果集 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转true OPEN My_Cursor; -- 打开游标 myLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到 FETCH My_Cursor into my_id, my_name; -- 将游标当前读取行的数据顺序赋予自定义变量12 IF done THEN -- 判断是否继续循环 LEAVE myLoop; -- 结束循环 END IF; -- 自己要做的事情,在 sql 中直接使用自定义变量即可 set my_name = CONCAT(my_name,'ttt'); UPDATE Student SET name = my_name WHERE id = my_id; COMMIT; -- 提交事务 END LOOP myLoop; -- 结束自定义循环体 CLOSE My_Cursor; -- 关闭游标 END -- 结束存储过程 ;;DELIMITER ;
游标
游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。
游标是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据。一般复杂的存储过程,都会有游标的出现,他的用处主要有:
- 定位到结果集中的某一行。
- 对当前位置的数据进行读写。
- 可以对结果集中的数据单独操作,而不是整行执行相同的操作。
- 是面向集合的数据库管理系统和面向行的程序设计之间的桥梁。
DECLARE CS CURSOR 是声明游标,for后面跟一个查询语句
- 存储过程(1)----开篇
- 分页存储过程(1)
- sql存储过程(1)
- 存储过程例子(1)
- 二,存储过程(1)
- Oracle存储过程(1)
- (1)开篇
- JavaScript(1)开篇
- 存储过程(嵌套存储过程)
- oracle存储过程和存储函数(1)
- Oracle存储过程和存储函数(1)
- 数据海量分页存储过程(1)
- oracle 的存储过程(1)
- SQLServer 分页存储过程(1)
- SQL存储过程测试(1)
- jdbc 调用存储过程(1)
- mysql存储过程(基础1)
- MySQL存储过程学习 (1)
- 【HDU 2080 】夹角有多大I 【求夹角 acos】
- 特征工程:信息熵、信息增益、信息增益率
- input标签中autocomplete="off"失效的具体解决办法
- KM算法
- PCA主成分分析
- 存储过程(1)----开篇
- JS时间的计算,剩余时间的计算
- 【nowcoder】字符串参数解析
- C++学习笔记之map键值对的修改
- MSSQL注入之木马上传拿webshell
- 封装tap事件
- javaWeb的MVC思想解读
- python 中zip()函数
- 编写一个表达学生和课程关系的程序-Java描述