一 今日工作内容
写存储过程
二 问题
工作用的数据库是db2,在学校的时候完全没有接触过。
工作要求 如下
--输入参数 字符串类型 varchar(50)
--输出参数
--结果集 1 定义表头结果集 省份,城市,姓名,微信号,电话号码,地址
--结果集2 所有含有这个输入参数字符串的人的结果集(空字符串查找全部),按省份,城市升序排序(但北京,上海,重庆,天津等直辖市要排在最前面)
问题1:
模糊查询,以传入的参数作为条件,要用||将参数和%链接起来,如: '%'||v_companyid||'%';
问题2:
排序的时候北京,上海,重庆,天津等直辖市要排在最前面,需要指定这些数据在最前面,用decode函数。
order by decode(provname,'北京',1,'上海',2,'天津',3,'重庆',4)
这样北京排在第一,上海排在第二,天津排在第三,重庆排在第四。
如遇到空值时, order by 默认将空值排在最下面,如要排在最上面,则:
order by nulls first
具体代码如下:
--删除一个存储过程
DROP PROCEDURE nbadv.TEST_WCM@
--创建一个存储过程CREATE PROCEDURE TEST_WCM(
--输入参数
IN v_companyid VARCHAR(50))
--返回两个结果集
DYNAMIC RESULT SETS 2LANGUAGE SQL
BEGIN
DECLARE SQLCODE INT;
DECLARE v_errCode INT DEFAULT 0;
--标题
DECLARE GLOBAL TEMPORARY TABLE captions
(
caption VARCHAR(500),
width INT,
property VARCHAR(40),
format VARCHAR(20),
fixcol INT,
align VARCHAR(20),
datatype INT,
type VARCHAR(20),
ordertag int
) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED;
DECLARE GLOBAL TEMPORARY TABLE result
(
provname VARCHAR(100),
city VARCHAR(100),
person_name VARCHAR(40),
weixin VARCHAR(50),
tel_num VARCHAR(50),
p_address VARCHAR(200)
) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED;
insert into session.result( provname,city, person_name, weixin, tel_num, p_address)
select provname,city, person_name, weixin, tel_num, p_address from C_TERMINALPERSON_TRUE where person_name like '%'||v_companyid||'%';
insert into session.captions( ordertag,caption, width, property, format, fixcol, align, datatype,type)
values(0,'省份',60,'provname','', 1, 'center', 0,'lable' ),
(1,'城市',60,'city','', 1, 'center', 0 ,'lable'),
(2,'姓名',60,'person_name','', 1, 'center', 0 ,'lable'),
(3,'微信',60,'weixin','', 1, 'center', 0 ,'lable'),
(4,'电话',60,'tel_num','', 1, 'center', 0 ,'lable'),
(5,'地址',60,'p_address','', 1, 'center', 0 ,'lable');
BEGIN
DECLARE v_captionCur CURSOR WITH RETURN TO CALLER FOR
SELECT * FROM SESSION.captions order by ordertag;
DECLARE v_resultCur CURSOR WITH RETURN TO CALLER FOR
select * from session.result order by decode(provname,'北京',1,'上海',2,'天津',3,'重庆',4), provname,city ;
OPEN v_captionCur;
OPEN v_resultCur;
END;
END
@