跟我学mysql存储过程.doc

Similar documents
SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

chap07.key

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

未命名

Oracle高级复制冲突解决机制的研究

Hive:用Java代码通过JDBC连接Hiveserver

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

Flume-ng与Mysql整合开发

Microsoft Word 電腦軟體設計.doc

ebook 96-16

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

通过Hive将数据写入到ElasticSearch

電機工程系認可證照清單 /7/1

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

untitled

untitled

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

錄...1 說...2 說 說...5 六 率 POST PAY PREPAY DEPOSIT 更


山东建筑大学学分制管理规定(试行)

untitled

基于UML建模的管理管理信息系统项目案例导航——VB篇

FileMaker 15 ODBC 和 JDBC 指南

FileMaker 16 ODBC 和 JDBC 指南

今天 年春季号 总 92 期

*

( ) / / / / / / /

(Microsoft Word - 8\244T\244\362\277\337\272]\244W\265L\246W.doc)

Microsoft Word - 專家本色 doc

但, 你 应 该 听 过 我 们 走 在 大 路 上 这 首 歌, 或 许 还 知 道 革 命 人 永 远 是 年 轻 那 支 歌 ; 并 且, 几 乎 可 以 肯 定, 你 在 戴 红 领 巾 的 那 阵, 必 然 唱 过 牛 儿 还 在 山 坡 吃 草, 放 牛 的 却 不 知 道 哪 儿 去

2 临 终 助 念 答 问 序 临 终 关 怀, 由 佛 门 净 宗 古 来 祖 师 大 德 提 倡 助 念 往 生, 现 今 已 渐 为 社 会 大 众 所 重 视, 在 台 湾, 台 大 长 庚 等 各 大 医 院, 也 都 设 有 助 念 室 ; 大 陆 上 许 多 道 场, 也 有 专 为

校园之星

Microsoft Word - 澎湖田調報告-宏達組9804.doc

<4D F736F F F696E74202D FA8BEA861B8EAB7BDBEE3A658BB50C0B3A5CE28B773A6CBA5AB29>

之 原 則 及 國 防 部 訂 頒 國 軍 列 管 國 有 不 動 產 提 供 非 軍 方 單 位 使 用 處 理 原 則 規 定 不 符, 仍 應 以 出 租 方 式 辦 理 惟 可 就 偏 遠 地 區 提 供 官 兵 金 融 水 電 服 務 使 用 部 分, 研 議 降 低 租 金 標 準, 報

釋禪波羅蜜次第法門

1700 装 卸 搬 运 7645 装 卸 搬 运 服 务 2100 建 筑 7410 工 程 服 务 11% 装 卸 搬 运 服 务, 是 指 使 用 装 卸 搬 运 工 具 或 者 人 力 畜 力 将 货 物 在 运 输 工 具 之 间 装 卸 现 场 之 间 或 者 运 输 工 具 与 装 卸

《盗墓笔记》 南派三叔/著

平 凡 足 迹 李 本 川 作 者 为 中 国 科 学 院 海 洋 研 究 所 研 究 员,1935 年 生, 山 东 荣 成 人 我 今 年 63 岁 了 大 前 年 丈 夫 和 儿 子 在 一 个 月 内 先 后 离 开 了 人 世, 女 儿 又 已 出 嫁, 现 在 是 孑 然 一 身 我 是


untitled

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

untitled

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

Microsoft Word - 第3章.doc

PowerPoint Presentation

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

目錄

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

无类继承.key

IBM Rational ClearQuest Client for Eclipse 1/ IBM Rational ClearQuest Client for Ecl

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

Guava学习之Resources

PowerPoint Template

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

sql> startup mount 改变数据库的归档模式 sql> alter database archivelog # 打开数据库 sql> alter database open 禁止归档模式 sql> shutdown immediate sql>startup mount sql> al

数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

目 錄 1. 青 椒 炒 肉 絲 2 2. 茄 汁 燴 魚 片 3 3. 乾 煸 四 季 豆 4 4. 黑 胡 椒 豬 柳 5 5. 香 酥 花 枝 絲 6 6. 薑 絲 魚 片 湯 7 7. 醋 瓦 片 魚 8 8. 燜 燒 辣 味 茄 條 9 9. 炒 三 色 肉 丁 榨 菜 炒

"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S

Oracle 4

一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 S

《C语言程序设计》第2版教材习题参考答案

untitled

Transcription:

目录 1.1 CREATE PROCEDURE ( 创建 ) ---------------------------------------------------- 2 1.2 ALTER PROCEDURE ( 修改 ) ------------------------------------------------------- 2 1.3 DROP PROCEDURE ( 删除 ) ------------------------------------------------------- 2 1.4 SHOW CREATE PROCEDURE( 类似于 SHOW CREATE TABLE, 查看一个 已存在的存储过程 ) -------------------------------------------------------------------------------- 2 1.5 SHOW PROCEDURE STATUS ( 列出所有的存储过程 ) ---------------------- 3 1.6 CALL 语句 ( 存储过程的调用 ) --------------------------------------------------------- 3 1.7... ( 复合语句 )-------------------------------------------------------------- 3 1.8 DECLARE 语句 ( 用来声明局部变量 )------------------------------------------------- 3 1.9 存储程序中的变量 --------------------------------------------------------------------------- 3 1.10 MySQL 存储过程参数类型 (in out inout) ---------------------------------------- 4 1.11 例子 : ----------------------------------------------------------------------------------------- 4 1.12 Java 代码调用存储过程 (JDBC)------------------------------------------------------------ 5 1.13 声明 :---------------------------------------------------------------------------------------- 6 冯靖 联系方式 sxyx2008@163.com http://www.blogjava.net/sxyx2008 1

MySQL 存储过程 1.1 CREATE PROCEDURE ( 创建 ) CREATE PROCEDURE 存储过程名 ( 参数列表 ) SQL 语句代码块 注意 : 由括号包围的参数列必须总是存在 如果没有参数, 也该使用一个空参数列 () 每个参数默认都是一个 IN 参数 要指定为其它参数, 可在参数名之前使用关键词 OUT 或 INOUT 在 mysql 客户端定义存储过程的时候使用 delimiter 命令来把语句定界符从 ; 变为 // 当使用 delimiter 命令时, 你应该避免使用反斜杠 ( \ ) 字符, 因为那是 MySQL 的转义字符 如 : mysql> delimiter // mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) -> -> SELECT COUNT(*) INTO param1 FROM t; -> -> // Query OK, 0 rows affected (0.00 sec) 1.2 ALTER PROCEDURE ( 修改 ) ALTER PROCEDURE 存储过程名 SQL 语句代码块 这个语句可以被用来改变一个存储程序的特征 1.3 DROP PROCEDURE ( 删除 ) DROP PROCEDURE IF EXISTS 存储过程名 eg:drop PROCEDURE IF EXISTS proc_employee (proc_employee 存储过程名 ) 这个语句被用来移除一个存储程序 不能在一个存储过程中删除另一个存储过程, 只能调用另一个存储过程 1.4 SHOW CREATE PROCEDURE( 类似于 SHOW CREATE TABLE, 查看一个已 存在的存储过程 ) SHOW CREATE PROCEDURE 存储过程名 2

1.5 SHOW PROCEDURE STATUS ( 列出所有的存储过程 ) SHOW PROCEDURE STATUS 1.6 CALL 语句 ( 存储过程的调用 ) CALL 存储过程名 ( 参数列表 ) CALL 语句调用一个先前用 CREATE PROCEDURE 创建的程序 CALL 语句可以用声明为 OUT 或的 INOUT 参数的参数给它的调用者传回值 存储过程名称后面必须加括号, 哪怕该存储过程没有参数传递 1.7... ( 复合语句 ) [begin_label:] [statement_list] [end_label] 存储子程序可以使用... 复合语句来包含多个语句 statement_list 代表一个或多个语句的列表 statement_list 之内每个语句都必须用分号 (;) 来结尾 复合语句可以被标记 除非 begin_label 存在, 否则 end_label 不能被给出, 并且如果二者都存在, 他们必须是同样的 1.8 DECLARE 语句 ( 用来声明局部变量 ) DECLARE 语句被用来把不同项目局域到一个子程序 : 局部变量 DECLARE 仅被用在... 复合语句里, 并且必须在复合语句的开头, 在任何其它语句之前 1.9 存储程序中的变量 1.1 DECLARE 局部变量 DECLARE var_name[,...] type [DEFAULT value] 这个语句被用来声明局部变量 要给变量提供一个默认值, 请包含一个 DEFAULT 子句 值可以被指定为一个表达式, 不需要为一个常数 如果没有 DEFAULT 子句, 初始值为 NULL 局部变量的作用范围在它被声明的... 块内 它可以被用在嵌套的块中, 除了那些用相同名字声明变量的块 1.2 变量 SET 语句 SET var_name = expr [, var_name = expr] 在存储程序中的 SET 语句是一般 SET 语句的扩展版本 被参考变量可能是子程序内声明的变量, 或者是全局服务器变量 3

在存储程序中的 SET 语句作为预先存在的 SET 语法的一部分来实现 这允许 SET a=x, b=y,... 这样的扩展语法 其中不同的变量类型 ( 局域声明变量及全局和集体变量 ) 可以被混合起来 这也允许把局部变量和一些只对系统变量有意义的选项合并起来 1.3 SELECT... INTO 语句 SELECT col_name[,...] INTO var_name[,...] table_expr 这个 SELECT 语法把选定的列直接存储到变量 因此, 只有单一的行可以被取回 SELECT id,data INTO x,y FROM test.t1 LIMIT 1; 注意, 用户变量名在 MySQL 5.1 中是对大小写不敏感的 重要 : SQL 变量名不能和列名一样 如果 SELECT... INTO 这样的 SQL 语句包含一个对列的参考, 并包含一个与列相同名字的局部变量,MySQL 当前把参考解释为一个变量的名字 1.10 MySQL 存储过程参数类型 (in out inout) 此小节内容来自 : 参见地址 :http://www.blogjava.net/nonels/archive/2009/04/22/233324.html MySQL 存储过程参数 (in) MySQL 存储过程 in 参数 : 跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数, 但对 in 类型参数的修改, 对调用者 (caller) 来说是不可见的 (not visible) MySQL 存储过程参数 (out) MySQL 存储过程 out 参数 : 从存储过程内部传值给调用者 在存储过程内部, 该参数初始值为 null, 无论调用者是否给存储过程参数设置值 MySQL 存储过程参数 (inout) MySQL 存储过程 inout 参数跟 out 类似, 都可以从存储过程内部传值给调用者 不同的是 : 调用者还可以通过 inout 参数传递值给存储过程 总结如果仅仅想把数据传给 MySQL 存储过程, 那就使用 in 类型参数 ; 如果仅仅从 MySQL 存储过程返回值, 那就使用 out 类型参数 ; 如果需要把数据传给 MySQL 存储过程, 还要经过一些计算后再传回给我们, 此时, 要使用 inout 类型参数 1.11 例子 : 1.1 创建存储过程带 ( 输出参数 ) 返回值的存储过程 : -- 删除存储过程 DROP PROCEDURE IF EXISTS proc_employee_getcount -- 创建存储过程 CREATE PROCEDURE proc_employee_getcount(out n int) SELECT COUNT(*) FROM employee ; 4

--MYSQL 调用存储过程 CALL proc_employee_getcount(@n); 带输入参数的存储过程 : -- 删除存储过程 DROP PROCEDURE IF EXISTS proc_employee_findbyid; -- 创建存储过程 CREATE PROCEDURE proc_employee_findbyid(in n int) SELECT * FROM employee where id=n; -- 定义变量 SET @n=1; -- 调用存储过程 CALL proc_employee_findbyid(@n); 操作存储过程时应注意 : 1. 删除存储过程时只需要指定存储过程名即可, 不带括号 ; 2. 创建存储过程时, 不管该存储过程有无参数, 都需要带括号 ; 3. 在使用 SET 定义变量时应遵循 SET 的语法规则 ; SET @ 变量名 = 初始值 ; 4. 在定义存储过程参数列表时, 应注意参数名与数据库中字段名区别开来, 否则将出现无法预期的结果 1.12 Java 代码调用存储过程 (JDBC) 相关 API:java.sql.CallableStatement 使用到 java.sql.callablestatement 接口, 该接口专门用来调用存储过程 ; 该对象的获得依赖于 java.sql.connection; 通过 Connection 实例的 preparecall() 方法返回 CallableStatement 对象 preparecall() 内部为一固定写法 call 存储过程名 ( 参数列表 1, 参数列表 2) 可用? 占位 eg: connection.preparecall("call proc_employee(?)"); 存储过程中参数处理 : 输入参数 : 通过 java.sql.callablestatement 实例的 setxxx() 方法赋值, 用法等同于 java.sql.preparedstatement 输出参数 : 通过 java.sql.callablestatement 实例的 registeroutparameter( 参数位置, 参数类型 ) 方法赋值, 其中参数类型主要使用 java.sql.types 中定义的类型 Java 代码调用带输入参数的存储过程 ( 根据输入 ID 查询雇员信息 ) public void executeprocedure() try /** * callablestatement java.sql.callablestatement * connection java.sql.connection * jdbc 调用存储过程原型 * call 存储过程名 ( 参数列表 1, 参数列表 2) 可用? 代替 */ 5

callablestatement=connection.preparecall("call proc_employee_findbyid(?)"); callablestatement.setint(1, 1); // 设置输入参数 resultset=callablestatement.executequery();// 执行存储过程 if(resultset.next()) System.out.println(resultSet.getInt(1)+"\t"+resultSet.getString(2)); catch (SQLException e) e.printstacktrace(); Java 代码调用带输出参数的存储过程 ( 返回数据库中的记录数 ) public void executeprocedure() try /** * callablestatement java.sql.callablestatement * connection java.sql.connection * jdbc 调用存储过程原型 * call 存储过程名 ( 参数列表 1, 参数列表 2) 可用? 代替 */ callablestatement=connection.preparecall("call proc_employee_getcount(?)"); // 设置输出参数 callablestatement.registeroutparameter(1, Types.INTEGER); // 执行存储过程 resultset=callablestatement.executequery(); if(resultset.next()) System.out.println(resultSet.getInt(1)); catch (SQLException e) e.printstacktrace(); 1.13 声明 : 此文档中除 MySQL 存储过程参数类型 (in out inout) 小节来自网上, 其余均为本人原创, 欢迎大 家转载, 如有不足, 请指教 6