SQL必知必会 笔记 第十九章 使用存储过程

19.1存储过程

存储过程:为以后的使用而保存的一条或多条SQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。

19.2为什么要使用存储过程

使用存储过程的理由

(1)通过把处理封装在容易使用的单元中,简化复杂的操作。

(2)由于不要求反复建立一系列处理步骤,保证了数据的一致性。

(3)简化对变动的管理。

(4)因为存储过程通常以编译的形式存储,所以DBMS为处理命令所做的工作较少。提高了性能。

(5)存在一些只能用在单个请求中的SQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码。

话句话说,存储过程有三个主要好处:简单,安全,高性能。

存储过程的缺陷

(1)不同DBMS中的存储过程语法有所不同。事实上,编写真正的可移植存储过程几乎是不可能的。不过,存储过程如何自我调用可以相对保持可移植性。

(2)一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。

大多数DBMS将编写存储过程的安全和访问与执行存储过程的安全和访问区分开来。即使你不能编写自己的存储过程,也仍然可以在适当的时候执行别的存储过程。

19.3执行存储过程

执行存储过程的SQL语句很简单,即EXECUTE。EXECUTE接受存储过程名和需要传递给它的任何参数。

EXECUTE AddNewProduct(‘JTS01‘,
     ‘Stuffed Eiffel Tower‘,
     6.49,
     ‘Plush stuffed toy with the text La Tour Eiffel in red white and blue‘)

存储过程完成的工作:

(1)检验传递的数据,保证参数都有值。

(2)生成用作主键的唯一ID。

(3)将新产品插入Products表,在合适的列中存储生成的主键和传递的数据。

19.4创建存储过程

CREATE PROCEDURE MailingListCount
(ListCount OUT NUMBER)
IS
BEGIN
     SELECT * FROM Customers
     WHERE NOT cust_email IS NULL;
     ListCount := SQL%ROWCOUNT;
END;

此存储过程有一个名为ListCount的参数。此参数从存储过程返回一个值而不是传递一个值给存储过程。

存储过程的代码括在BEGIN和END语句中,这里的执行一条简单的SELECT语句,它检索具有邮件地址的客户。然后用检索出的行数设置ListCount(要传递的输出参数)。

注释代码:应该注释所有代码,存储过程也不例外。增加注释不影响性能,因此不存在缺陷。注释代码的好处很多,包括别人更容易理解和更安全修改代码。

时间: 2024-10-12 23:10:58

SQL必知必会 笔记 第十九章 使用存储过程的相关文章

扣响C#之门笔记-第十九章

19.1 sting 类 sting 类的基础用法: (1).NET为sting设计了索引器,因此可以像数组那样访问字符串: (2)Length属性表示字符串长度(是string类唯一的属性) (3)"="运算符将元字符串的引用,传递给目标字符串,从而使两个变量指向同一个字符串: (4)字符串不可改变,当我们改变字符串的值时,系统会为字符串重新分配引用空间,并将值放进去:(因此不会影响原引用地址的内容) (5)string.Copy用于复制字符串内容,(直接复制值,非引用地址) (6)

SQLServer:《SQL必知必会》一书的读书笔记(五)

第5课 高级数据过滤 5.1 组合 WHERE 子句 第4课介绍的 WHERE 子句在过滤数据时都是用单一的条件. 5.1.1 AND 操作符 检索由供应商 DLL01 制造且价格小于等于 4 美元的所有产品的名称和价格: SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4; 5.1.2 OR 操作符 检索任一个指定供应商制造的所有产品的名称和价格: SEL

SQLServer:《SQL必知必会》一书的读书笔记(八)

第8课 使用函数处理数据 8.1 函数 [名词]可移植:所编写的代码可以在多个系统上运行 8.2 使用函数 8.2.1 文本处理函数 例1:使用 UPPER() 函数--将文本转换为大写 SELECT vend_name, UPPER(vend_name) AS vend_name_upcase FROM Vendors ORDER BY vend_name; 常用的文本处理函数: LEFT():返回字符串左边的字符 DATALENGTH():返回字符串的长度 LOWER():将字符串转换为小写

《SQL必知必会》学习笔记(一)

<SQL必知必会>学习笔记(一) 下面变列出我新学到的知识. 这个是数据库的全部记录 1.order by   语句: select * from Scores order by name , Score desc 执行结果: ①order by在执行排序功能时,会先对排序字段按abcd这样的顺序进行,汉字的话是按拼音的首字母,默认是正序. ②例子中先按name字段进行正序排序,当name相同时,又按score倒叙排,例如拜仁两条数据,胜的开头字母是s,负的是f,因为是倒叙,所以胜的那条数据排

《SQL必知必会》学习笔记二)

<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语句,但是实际应用中的业务逻辑往往会非常复杂,所以会用到一些比较复杂的查询,如子查询,联合查询. 1.子查询 当一个查询是另一个查询的条件时,称为子查询.但是说到子查询又不的不说它与嵌套查询两者的区别,下面一张图来说明 下面再用一条sql语句来说明他们的关系. 其中在查询中又分为嵌套子查询和相关子查询,他们之间

SQLServer:《SQL必知必会》一书的读书笔记(四)

第4课 过滤数据 4.1 使用 WHERE 子句:过滤 只检索所需数据需要指定搜索条件(即过滤条件). WHERE 子句在表名(FROM 子句)后给出,根据 WHERE 子句中指定的条件过滤. SELECT prod_name, prod_price FROM Products WHERE prod_price = 3.49; -- 分析:从 Products 表中检索两个列,只返回 prod_price 值为 3.49 的行 [提示]SQL 过滤与应用过滤: 数据也可以在应用层过滤.但是在优化

MySQL必知必会 学习笔记(一)

第一章  了解SQL 模式:   关于数据库和表的布局以及特性的信息.[描述表可以存储什么样的数据,数据如何分解,各部分信息如何命名等等,可以用来描述数据库中特定的表以及整个数据库(和其中表的关系)]. 第二章 MySQL简介 MySQL是一种DBMS,即它是一种数据库软件.基于客户机----服务器的数据库. MySQL工具: 1.mysql 命令行实用程序 2.MySQL Administrator 3.MySQL query Browser 第四章 检索数据 LIMIT 5 表示MySQL返

《MySQL必知必会》读书笔记_4

PS:一个实际的存储过程案例 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_delete_article_by_id`(IN `id` int) BEGIN #Routine body goes here... DECLARE temp INT; SET @aid = id; SELECT COUNT(*) FROM gk_reply_article WHERE a_id = @aid INTO temp; IF(temp <> 0) THEN

《MySQL必知必会》读书笔记_3

PS:这次的信息量有点大. 聚集不同值 SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003 #相同的值不会被计算 组合聚集函数 SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max, AVG(prod_price) AS price_avg FROM products