mysql存储过程编程.pdf
还剩
143页未读,
继续阅读
下载文档到电脑,马上远离加班熬夜!
亲,很抱歉,此页已超出免费预览范围啦!
如果喜欢就下载吧,价低环保!
内容要点:
MySQL 存储过程编程 144 / 144 5.7.第五章结语 在这一章中我们回顾了 MySQL 提供的在存储程序中包含 SQL 的功能。下面的几种 SQL 语句可以出现在存储程序中: ? 简单内嵌非 SELECT 语句,包括 DML 语句( INSERT, DELETE, UPDATE)和 DDL 语句( CREATE, DROP, ALTER 等)可以没有任何限制的被包含在 存储程序MySQL 存储过程编程 143 / 144 5.6.SQL 错误处理:预览 MySQL 存储程序的错误处理是如此的重要,也是如此复杂,因此我们决定把该部分内容放到第六章中讨论。但是,我们在此可以提供一个快速的概览。 通常,如果一个存储程序中的 SQL 语句发生了错误,那么存储程序会停止运行并把错误返回给它的调用程序。如果你不期望发生这种事情,你必须用如下语法指定一个错误处理单元: DEMySQL 存储过程编程 142 / 144 以及其他的各种优化。 你或许不会经常用到动态 SQl 和预处理语句,但是当你创建基于用户输入或存储程序参数的 SQL 语句时,它确实可以为你节省大量的时间。当然,最后的忠告:当你创建基于用户输入的 SQL 时,你就增大了像 SQL 注入这种安全攻击的可能性,而由于存储过程使用独一无二的执行上下文 ,因此,注入式攻击事实上给存储过程的风险提出了一个MySQL 存储过程编程 141 / 144 in_contact_firstname VARCHAR(30), in_phoneno VARCHAR(10)) BEGIN DECLARE l_where_clause VARCHAR(1000) DEFAULT 'WHERE'; IF in_customer_name IS NOT NULL THEN SET l_where_clause=CMySQL 存储过程编程 140 / 144 'SET',in_column,'=',in_new_value, ' WHERE',in_where); SET @sql=l_sql; PREPARE s1 FROM @sql; EXECUTE s1; DEALLOCATE PREPARE s1; END; 我们可以称这个为首席雇员( employee ID 1)零支出程序( CEO!这回看你MySQL 存储过程编程 139 / 144 Query OK, 1 row affected (0.00 sec) mysql> DEALLOCATE PREPARE prod_insert_stmt; Query OK, 0 rows affected (0.00 sec) 现在我们注意到预处理语句减少了 SQL 语句中少数数据值改变时重新解析(预处理)的开销,并且因为允许使用 SQL语句MySQL 存储过程编程 138 / 144 5.5.使用预处理语句执行动态 SQL MySQL 支持一项功能名为服务器端预处理语句,被用于提供独立于 API 的,在反复执行过程中具备高效性和安全性的 SQL 语句预处理。从编程的角度看,预处理语句具备很大的优势,因为它允许你创建动态 SQL 调用。 我们使用 PREPARE 语句来创建预处理语句: PREPARE statement_naMySQL 存储过程编程 137 / 144 OPEN sale_csr; sale_loop:LOOP FETCH sale_csr INTO l_sale_id; IF l_last_sale THEN LEAVE sale_loop; END IF; CALL sp_issue_one_invoice(l_sale_id); END LOOP sale_loop; CLOSE sa
发表评论
暂无评论,赶快抢占沙发吧。