如何在数据库中使用存储过程 【数据库高效编程 - 学习笔记 第九章】
来源:互联网 发布:java reflect method 编辑:程序博客网 时间:2024/05/16 14:13
SQL 基本是一个命令实现一个处理,即所谓的:非程序型语言。
程序型语言,可以为了达成某一目的,将处理流程通过多个命令来编写。
程序型语言,可以为了达成某一目的,将处理流程通过多个命令来编写。
非程序型语言,是不能编写流程的。
存储过程(Stored Procedure):数据库中保存的一系列 SQL 命令的集合。
也可以看作相互间有关系的 SQL 命令组织在一起形成的一个小程序。
存储过程的优点:
1、提高执行性能。通过客户端执行 SQL 的时候,在数据库中,有解析到编译的前期准备过程。
但是,创建了存储过程,实际上,事先完成了解析、编译的处理,然后,保存在数据库中,因此,执行更快。
2、减轻网络负担。
3、防止对表的直接访问。(禁止对表的直接访问,只赋予相关存储过程的访问权限)
4、将数据库的处理黑匣子化。
调用存储过程时,可以指定参数。参数包括:输入参数、输出参数。通过关键字 IN、OUT、INOUT来指定参数类型。
DELIMITER //CREATE PROCEDURE sp_search_customer (IN p_name VARCHAR(20) )BEGIN IF p_name IS NULL OR p_name = '' THEN SELECT * FROM customer; ELSE SELECT * FROM customer WHERE name LIKE p_name; END IF;ENDDELIMITER ;
SHOW PROCEDURE STATUS\GSHOW CREATE PROCEDURE sp_search_customer\GDROP PROCEDURE sp_search_customer;CALL sp_search_customer('王%');CALL sp_search_customer('');
DELIMITER //CREATE PROCEDURE sp_search_customer2 (IN p_name VARCHAR(20), OUT p_cnt INT )BEGIN IF p_name IS NULL OR p_name='' THEN SELECT * FROM customer; ELSE SELECT * FROM customer WHERE nam LIKE p_nam; END IF; SELECT FOUND_ROWS() INTO p_cnt;ENDDELIMITER ;CALL sp_search_customer2('王%', @num);SELECT @num;
DELIMITER //CREATE PROCEDURE sp_search_employee(IN p_depart INT)BEGIN IF p_depart = 1 THEN SELECT fname, lname, depart FROM employee WHERE depart = '研究部'; ELSEIF p_depart = 2 THEN SELECT fname, lname, depart FROM employee WHERE depart = 'AC 部'; ELSEIF p_depart = 3 THEN SELECT fname, lname, depart FROM employee WHERE depart = 'IT 部门'; ELSEIF p_depart = 4 THEN SELECT fname, lname, depart FROM employee WHERE depart = '人事部'; ELSE SELECT fname, lname, depart FROM employee WHERE depart = '经理部'; END IF;ENDDELIMITER ;CALL sp_search_employee(3);
DELIMITER //CREATE PROCEDURE sp_search_employee2(IN p_depart INT)BEGIN DECLARE tmp CHAR(4); CASE p_depart WHEN 1 THEN SET tmp = '研究部'; WHEN 2 THEN SET tmp = 'AC 部'; WHEN 3 THEN SET tmp = 'IT 部'; WHEN 4 THEN SET tmp = '人事部'; ELSE SET tmp = '经理部'; END CASE; SELECT fname, lname, depart FROM employee WHERE depart = tmp;ENDDELIMITER ;
DELIMITER //CREATE PROCEDURE sp_factorial( IN p_num INT, OUT p_result INT)BEGIN SET p_result = 1; WHILE p_num > 1 DO SET p_result = p_result * p_num; SET p_num = p_num - 1; END WHILE;ENDDELIMITER ;CALL sp_factorial(5, @res);SELECT @res;
DELIMITER //CREATE PROCEDURE sp_factorial2( IN p_num INT, OUT p_result INT)BEGIN SET p_result = 1; REPEAT SET p_result = p_result * p_num; SET p_num = p_num - 1; UNTIL p_num <= 1 END REPEAT;ENDDELIMITER ;CALL sp_factorial2(5, @res);SELECT @res;
- 如何在数据库中使用存储过程 【数据库高效编程 - 学习笔记 第九章】
- 如何在数据库中使用索引 【数据库高效编程 - 学习笔记 第七章】
- 如何在网店数据库中使用视图 【数据库高效编程 - 学习笔记 第八章】
- 在MySQL中使用SQL 【数据库高效编程 - 学习笔记 第四章】
- 在JDBC技术中如何使用存储过程(SQLSERVER数据库
- 数据库管理中文件的使用 【数据库高效编程 - 学习笔记 第十一章】
- 数据库存储过程学习笔记
- 数据库中使用存储过程
- 事务处理及锁定 【数据库高效编程 - 学习笔记 第六章】
- 使用函数与触发器 【数据库高效编程 - 学习笔记 第十章】
- 关于在存储过程中使用游标操作数据库
- 在C# 中使用存储过程访问 SQL 数据库
- 存储过程学习笔记(SQL数据库)
- 存储过程在数据库中测试
- 如何获取当前数据库名称及在存储过程中临时设置数据库兼容级别
- 数据库与MySQL 【数据库高效编程 - 学习笔记 第一章、第二章】
- 数据库存储过程学习
- 数据库存储过程学习
- jsp标准标签库(2)
- C# 调用大漠插件的方法
- 改善PHP开发方式的5种方法
- 尚观学习-shell-预定义变量 & 位置变量
- Visual C++编程实现摄像头视频捕捉
- 如何在数据库中使用存储过程 【数据库高效编程 - 学习笔记 第九章】
- 使用“捕捉”地理处理工具进行数据的自动编辑
- C# DllImport的用法 调用Window的一些常用功能
- CronTriggerBean 配置
- 自定义行转定函数wm_concat应用(PLS-00530)
- JSTL-核心标签库
- 学外语的十条经验
- 让百度收录信息发布的技巧
- Eclipse 或 MyEclipse 不能自动编译 class文件