当前位置:文档之家› db2sql语句

db2sql语句

1 限制结果表大小Select * from tabname fetch first 5 rows only;2 cast用法Select * from tabnameA where coln = cast( ‘TR01’ as tabnameB)CAST(salary AS DOUBLE) 类型转换3 连接内连接selet a.col,b.col from tab a,tab b where a.t1=b.t1;外连接:左连接:select a.col,b.col from tab a left join tab b on a.t1=b.t1 (left outer join)右连接:4 输出排序Order by col DESC 降序排列缺省为升序5 限制输出结果,与order共用Select * from tabA order by col desc fetch first 5 rows only6 substr函数Substr(col,1,2); col为char或varchar型7 列函数可以参照数据库中FUNCTIONS中的说明用Quest Centeral查看,以下是常用的Max 、avg、count…DB2中的VARCHAR转换为INTEGER的函数为CAST()DB2中的INTEGER转换为VARCHAR的函数为CHAR()DB2中的VARCHAR转换为DATE的函数为DATE()DB2中的DATE转换为VARCHAR的函数为CHAR() char(col,iso) 输出yyyy-mm-ddYEAR() 返回date数值的年部分Month()返回date数值的月部分HOUR() 返回一个数值的小时部分SELECT HOUR('18:34:23')FROMSECOND() 返回一个数值的秒部分RTRIM()删除字符串尾部的空格Ltrim()删除字符串左边的空格Replace(col,exp1,exp2)替换col中exp1为exp2MOD(EXP1,EXP2) 返回EXP1除以EXP2的余数DOUBLE()如果参数是一个数字表达式,返回与其相对应的浮点数,如果参数是字符串表达式,则返回该数的字符串表达式.FLOA T() 返回一个数的浮点表示FLOOR() 返回小于或等于参数的最大整数8 group by分组Select a, sum(fse) from tab group by a having sum(fse)>1000 Having过滤条件9 取消重复值distinctSelect distinct col from tab10 字符串匹配like11 范围查找between and12 否定条件查找not like13 空值查询col is null14 查找一组值col in (1,2);15 子查询Select * from tabA where col1 in (select col from tabB); Select * from tabA where col1 not in (select col from tabB);16 case 表达式Select caseWhen score < 65 then ‘not passed’When score<=90 then ‘passed’Else ‘excellent’EndFrom tabA18 基础-多表的关联更新方法db2的update语法不支持“update table1 set t1.col1=t2.value1 from table1 t1,table2 t2 where …”的写法,但是可以通过如下方法解决:update table1 t1 set t1.col1=(select t2.col1 from table2 t2 where …)例:update test t1 set (ername,t1.instcode) = (selectt2.instcode,t2.instname from sysinsttb t2 wheret2.instcode=t1.instcode);19 集合运算符union intersect except并:union select col from tabA union select col from tabB交: intersect select col from tabA intersect select col from tabB差:except select col from tabA except select col from tabB20 insert …selectInsert into tabA select col1, col2 from tabB选择的列与插入的列数目、类型一致.21 DB2如何得到错误代码的说明?DB2 ?SQLCODE例:db2 ? sql080322 在命令行创建存储过程Db2 –td@ -vf sp.sqlSp.sql为脚本注意,一个可能的脚本如下:Sp.sql#注释Drop PROCEDURE db2inst1.spname@Create PROCEDURE db2inst1.spname(in cs1 char(1), in cs2 int, out outcode int)Language sqlBegindeclare SQLCODE int default 0;end@注意在客户端工具中不能加@实例名字也应该注意。

连接库用不同的用户时可能出现找不到存储过程的情形。

23 存储过程变量定义declare errorcode int ; 整数declare v_yf char(7) 定长字符串declare v_yf varchar(20) 变长字符串declare v_ye DECIMAL(19, 2) ; 金额浮点数declare v_dt date; 日期24 存储过程变量赋值1)语句赋值:select wdatebegin into v_mb_dt from time_allmonth where wdid=v_yf; 2)set赋值:set errorcode = 0;3)游标赋值:fetch cur_zh into v_zh;25 存储过程动态sql1)先定义字符串: declare v_sqlstr varchar(200) 变长字符串2)字符串赋值:set v_sqlstr = ‘’3)声明执行表示符:prepare s0 from v_sqlstr4)执行表示符:execute s05)如果在第二步定义?,则在第四步使用using例:SET stmt = 'INSERT INTO '||new_name || ' ' ||'SELECT empno, firstnme, midinit, lastname, salary '||'FROM employee '||'WHERE workdept = ?';PREPARE s3 FROM stmt;EXECUTE s3 USING deptNumber26 存储过程动态sql中字符串连接和value的用法set sqlstr='insert into db2inst2.fact_yhkywltj select '''|| v_yf||''' , khjg, kz, 0, value(count(*),0), 0, 0,0,0,0 from dwinst.card_dwkb where substr(kzt,1,1)='''||'0'||''' and substr(kzt,5,1)='''||'0'||''' group by khjg,kz';注意v_yf是字符型变量,连接符||两边各有3个’’’。

注意value的用法,返回值为空时赋缺省值27 存储过程的游标使用1)定义游标declare zhmx_cur cursor for select zh,rq,jce from tabA;2) 打开游标open zhmx_cur;3)定义循环标示:fetch_loop_zhmx: loop4)遍历游标,并赋值变量fetch zhmx_cur into v_zh, v_mx_rq, v_mx_jce;if errorcode != 0 thenleave fetch_loop_zhmx;---推出循环,相当于break;end if;if errorcode != 0 theniterate fetch_loop_zhmx;---结束后续操作,继续循环,相当于continue;end if;5)结束循环end loop fetch_loop_zhmx;6)关闭游标close zhmx_cur;28 关于continue handlerdeclare continue handler for sqlexception,sqlwarning,not foundset errorcode = SQLCODE;这条语句的作用是当sql出现错误的时候,把SQLCODE的值赋给errcode,并继续执行。

便于程序跟踪。

没有这条语句的话,当 sql语句出现错误后,整个存储过程立即推出。

注意在循环结束前将set errorcode = 0;29 存储过程的调用1)没有参数的话call procname();2)有输出参数的话call procname(?,?),几个输出参数,几个?3)有输入参数的话call procname(2,’aaa’),按输入参数的个数和类型输入。

4)既有输入又有输出的话call procname(2,’aaa’,?)30存储过程if逻辑判断用法1)两个判断if substr(c_day,6,2)=substr(t_day,6,2) then----else----end if;2)一个判断if SQLCODE != 0 and SQLCODE != 100 then----end if;3) 三个或以上判断:IF (rating = 1)----ELSEIF (rating = 2)----ELSE-----END IF;31 存储过程中case用法CASE ratingWHEN 1 THEN-------WHEN 2 THEN------ELSE-----END CASE;32 其他用法按db2安装目录下的案例D:\Program Files\IBM\SQLLIB\samples\sqlproc。

相关主题