db2数据库存储过程---简单的增删改查
来源:互联网 发布:网络直播泡沫 编辑:程序博客网 时间:2024/05/17 06:09
新的工作中要用到db2数据库,并且大部分业务逻辑都是用存储过程实现,所以最近开始在研究 db2 数据库存储过程,下面是一个简单的 demo 实现了增删改查:
1、数据准备:创建员工表EMPINFO
drop table DLX.EMPINFO; CREATE TABLE DLX.EMPINFO( EM_ID CHARACTER(8) not null, -- ID EM_NAME VARCHAR(50), --姓名 EM_SEX CHARACTER(1), --性别 1、男 0、女 EM_AGE SMALLINT, --年龄 EM_TELNUM varchar(11),--手机号码 EM_BIRTHDAY DATE,--生日 EM_ADD VARCHAR(255),--地址 EM_SALARY DECIMAL(15,2),--薪资 EM_CHANGEDAT DATE, --修改时间 PRIMARY KEY(EM_ID));
2、实现添加数据存储过程:
CREATE OR REPLACE PROCEDURE DLX.SP_E_EMPINFO_ADD_V1( IN ID CHARACTER(8), IN NAME VARCHAR(50), IN SEX CHARACTER(1), IN AGE CHARACTER(4), IN TELNUM varchar(11), IN BIRTHDAY CHARACTER(12), IN EMADD VARCHAR(255), IN SALARY VARCHAR(20), OUT pRtCode INTEGER)SPECIFIC DLX.SP_E_EMPINFO_ADD_V1LANGUAGE SQLBEGIN --异常处理 DECLARE SQLCODE INTEGER; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET pRtCode = SQLCODE; SET pRtCode = -1; IF ID = '' THEN SET ID = NULL; END IF; IF NAME = '' THEN SET NAME = NULL; END IF; IF SEX = '' THEN SET SEX = NULL; END IF; IF AGE = '' THEN SET AGE = NULL; END IF; IF TELNUM = '' THEN SET TELNUM = NULL; END IF; IF BIRTHDAY = '' THEN SET BIRTHDAY = NULL; END IF; IF EMADD = '' THEN SET EMADD = NULL; END IF; IF SALARY = '' THEN SET SALARY = NULL; END IF; INSERT INTO DLX.EMPINFO(EM_ID,EM_NAME,EM_SEX,EM_AGE,EM_TELNUM,EM_BIRTHDAY,EM_ADD,EM_SALARY,EM_CHANGEDAT) VALUES(ID,NAME,SEX,CAST(AGE AS SMALLINT),TELNUM,TO_DATE(BIRTHDAY,'YYYY-MM-DD'),EMADD,CAST(SALARY AS DECIMAL(15,2)),current timestamp); SET pRtCode = 0;END;
3、实现删除数据存储过程:
--删除员工信息 存储过程CREATE OR REPLACE PROCEDURE DLX.SP_E_EMPINFO_DEL_V1( IN ID CHARACTER(8), OUT PRTCODE INTEGER) SPECIFIC "SP_E_EMPINFO_DEL_V1" LANGUAGE SQLBEGIN DECLARE numrows INTEGER; DECLARE SQLCODE INTEGER; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET pRtCode = SQLCODE; SET pRtCode = -1; DELETE FROM DLX.EMPINFO WHERE "EM_ID" = ID; GET DIAGNOSTICS numrows = ROW_COUNT; IF numrows = 0 THEN SET pRtCode = 401; RETURN; END IF; SET pRtCode = 0;END;
4、实现修改数据存储过程:
--修改员工信息存储过程CREATE OR REPLACE PROCEDURE DLX.SP_E_EMPINFO_UPD_V1( IN ID CHARACTER(8), IN NAME VARCHAR(50), IN SEX CHARACTER(1), IN AGE CHARACTER(4), IN TELNUM varchar(11), IN BIRTHDAY CHARACTER(12), IN EMADD VARCHAR(255), IN SALARY VARCHAR(20), OUT pRtCode INTEGER)SPECIFIC DLX.SP_E_EMPINFO_UPD_V1LANGUAGE SQLBEGIN DECLARE numrows INT DEFAULT 0; --异常处理 DECLARE SQLCODE INTEGER; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET pRtCode = SQLCODE; SET pRtCode = -1; UPDATE DLX.EMPINFO SET EM_NAME = NAME,EM_SEX = SEX,EM_AGE = CAST(AGE AS SMALLINT), EM_TELNUM = TELNUM,EM_BIRTHDAY = TO_DATE(BIRTHDAY,'YYYY-MM-DD'), EM_ADD = EMADD, EM_SALARY = CAST(SALARY AS DECIMAL(15,2)),EM_CHANGEDAT = DATE(CURRENT TIMESTAMP) WHERE EM_ID = ID; GET DIAGNOSTICS numrows = ROW_COUNT; IF numrows = 0 THEN SET pRtCode = 401; RETURN; END IF; SET pRtCode = 0;END;
5、实现分页查询存储过程:
DROP PROCEDURE DLX.SP_E_EMPINFO_QRY_ALL_V1; --先删除已经存在的--分页查询存储过程CREATE OR REPLACE PROCEDURE DLX.SP_E_EMPINFO_QRY_ALL_V1( IN NAME VARCHAR(50), --输入参数定义 IN SEX CHARACTER(1), IN START INTEGER, IN LIMIT INTEGER, OUT O_TOTAL INTEGER, --输出参数定义 OUT O_RTCODE INTEGER)SPECIFIC "SP_E_EMPINFO_QRY_ALL_V1" --定义别名,唯一的DYNAMIC RESULT SETS 1 --定义游标BEGIN --异常处理 DECLARE SQLCODE INTEGER; DECLARE EXIT HANDLER FOR SQLEXCEPTION SET O_RTCODE = SQLCODE; SET O_RTCODE = -1; --查询总数 BEGIN DECLARE v_cur2 CURSOR FOR SELECT COUNT(1) FROM DLX.EMPINFO WHERE (NAME IS NULL OR NAME = '' OR EM_NAME like '%' || NAME || '%') AND (SEX IS NULL OR SEX = '' OR EM_SEX = SEX); OPEN v_cur2; FETCH v_cur2 INTO O_TOTAL; CLOSE v_cur2; END; --查询分页结果 BEGIN DECLARE v_cur1 CURSOR WITH RETURN TO CLIENT FOR SELECT EM_ID,EM_NAME,EM_SEX,EM_AGE,EM_TELNUM,EM_BIRTHDAY,EM_ADD,EM_SALARY,EM_CHANGEDAT FROM(SELECT B.EM_ID, B.EM_NAME, B.EM_SEX, B.EM_AGE, B.EM_TELNUM, B.EM_BIRTHDAY, B.EM_ADD, B.EM_SALARY, B.EM_CHANGEDAT, ROW_NUMBER() OVER(ORDER BY B.EM_ID ASC) RN FROM DLX.EMPINFO B WHERE (NAME IS NULL OR NAME = '' OR EM_NAME like '%' || NAME || '%') AND (SEX IS NULL OR SEX = '' OR EM_SEX = SEX) ) RS WHERE RS.RN >= START AND RS.RN <= (START+LIMIT); OPEN v_cur1; END; SET O_RTCODE = 0;END;
注意:调存储过程的方法:
调用的时候输入的参数传值,输出的参数用 ? 代替
例如调添加数据存储过程:
CALL DLX.SP_E_EMPINFO_ADD_V1(‘000013’,’拉拉’,’1’,22,’16066548712’,’2015-5-20’,’广州’,’666.99’,?);
这篇文章中只是写了最基本的增删改查的存储过程,详细的介绍及学习,以后慢慢总结。
1 0
- db2数据库存储过程---简单的增删改查
- sqlserver存储过程的增删改查
- 存储过程增删改查
- 简单的数据库 查询 增删改查 -----
- 数据库的简单操作----增删改查
- oracle数据库的简单增删改查
- 简单的数据库增删改查语句
- DB2简单的命令:建表、增删改查
- 使用存储过程进行基本的增删改查
- 存储过程实现基本的增删查改
- 存储过程实现基本的增删查改(二)
- 存储过程实现基本的增删查改
- 存储过程实现基本的增删查改(二)
- oracle 存储过程实现增删改查
- oracle存储过程增删改查
- jdbc增删改查操作 存储过程
- Oracle 存储过程之增删改查
- 数据库---简单的使用Java操作数据库增删改查
- 131. Palindrome Partitioning
- vecter<int>::size_type作为判断条件出错
- 如何解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”的错误?
- 4.乐学成语----------显示学习列表
- 视差贴图(parallax mapping)学习笔记
- db2数据库存储过程---简单的增删改查
- hadoop实践(三)hadoop 集群配置
- 算法导论第十二章-二叉搜索树-Cpp代码实现
- 在Oracle如何按照月份查询数据?
- 可扩展的listview
- 字符串匹配算法
- SICP 联系2.28 实现fringe
- RecycleView简单使用
- pdo中几种查询方式的区别