db2sql语句
db2常用sql语句

授权
grant dbadm on database to user bb
24.
列出所有的系统表
list tables for system
25.
查看表结构
db2 describe select * from user.tables
27.
导出单个表结构到一个文件
db2look -d masa -e -u MASAMK -a -t PSC_MODE_SCORE_200503 -o aa.out
CONFIG PARTITIONING_DBPARTNUMS(0,1,2,3)
装载语句:(消息文件)
load client FROM /export/masaetl/work/data/org_data/cond.avl \
of DEL MODIFIED BY COLDEL0x09 MESSAGES /export/masaetl/111 \
db2 force application ID1,ID2,,,Idn MODE ASYNC
(db2 list application for db o_yd show detail)
16.
备份数据库
db2 force application all
db2 backup db o_yd to d:
10.
连接数据库
db2 connect to o_yd user db2 using pwd
11.
读数据库管理程序配置
db2 get dbm cfg
12.
写数据库管理程序配置
db2 update dbm cfg using 参数名 参数值
DB2常用sql语句

DB2常⽤sql语句转DB2 提供了关连式资料库的查询语⾔sql(structured query language),是⼀种⾮常⼝语化、既易学⼜易懂的语法。
此⼀语⾔⼏乎是每个资料库系统都必须提供的,⽤以表⽰关连式的操作,包含了资料的定义(ddl)以及资料的处理(dml)。
sql原来拼成sequel,这语⾔的原型以"系统 r"的名字在 ibm 圣荷西实验室完成,经过ibm内部及其他的许多使⽤性及效率测试,其结果相当令⼈满意,并决定在系统r 的技术基础发展出来 ibm 的产品。
⽽且美国国家标准学会(ansi)及国际标准化组织(iso)在1987遵循⼀个⼏乎是以 ibm sql 为基础的标准关连式资料语⾔定义。
⼀、资料定义 DDL(data definition language)资料定语⾔是指对资料的格式和形态下定义的语⾔,他是每个资料库要建⽴时候时⾸先要⾯对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
1、建表格:create table table_name(column1 datatype [not null] [not null primary key],column2 datatype [not null],...)说明:datatype --是资料的格式,详见表。
nut null --可不可以允许资料有空的(尚未有资料填⼊)。
primary key --是本表的主键。
2、更改表格 alter table table_nameadd column column_name datatype说明:增加⼀个栏位(没有删除某个栏位的语法。
alter table table_nameadd primary key (column_name)说明:更改表得的定义把某个栏位设为主键。
alter table table_namedrop primary key (column_name)说明:把主键的定义删除。
db2 sql 教程

Alter table tabname add primary key(col)
删除主键:
Alter table tabname drop primary key(col)
删除表:drop table tabname
3、表空间:
创建表空间:create tablespace tbsname pagesize 4k managed by database using (file ‘file’ size)
语法格式:
Rollback [work]
高级sql简单介绍
一、查询间使用运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
删除表空间:drop tablespace tbsname
4、索引:
创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
[color=blue:b36c9124a3]注:索引是不可更改的,想更改必须删除重新建。[/color:b36c9124a3]
表空间加入容器:alter tablespace tablespace_name add(file 'filename' size)
db2 捕获sql语句

捕获sql语句在应用使用过程中,我们经常会碰到应用响应时间很慢,甚至没有响应,但是应用服务器可能并不是很繁忙,cpu利用率也非常低,引起这种状况的原因有很多种,比如环境问题,应用资源泄漏,数据库原因等等,本文主要是从一次应用性能诊断过程来谈谈如何通过数据库诊断应用性能问题。
1、打开db2监控开关#db2 connect to mes_wr#db2 update monitor switches using statement on#db2 reset monitor all2、十分钟之后,我们收集sql统计快照#db2 get snapshot for dynamic sql on mes_wr > dysqlstatus.out现在统计信息已经存放在dysqlstatus.out中,可以使用任意方便的文本处理工具查看,一般用aix上的vi来处理或者拷贝到win机器进行处理。
打开dysqlstatus.out 内容如下:Number of executions = 1Number of compilations = 1Worst preparation time (ms) = 2Best preparation time (ms) = 2Internal rows deleted = 0Internal rows inserted = 0Rows read = 2Internal rows updated = 0Rows written = 0Statement sorts = 0Statement sort overflows = 0Total sort time = 0Buffer pool data logical reads = Not CollectedBuffer pool data physical reads = Not CollectedBuffer pool temporary data logical reads = Not CollectedBuffer pool temporary data physical reads = Not CollectedBuffer pool index logical reads = Not CollectedBuffer pool index physical reads = Not CollectedBuffer pool temporary index logical reads = Not CollectedBuffer pool temporary index physical reads = Not CollectedTotal execution time (sec.ms) = 0.000377Total system cpu time (sec.ms) = 0.000000Statement text = select ACTIVITYDEFID,ACTIVITYINSTID from wfworkitem wherePROCESSINSTID=104199 and CURRENTSTATE = 4......在aix进行vi中的处理::g!/Total execution time/d只保留文本中的sql执行时间,我们要按照执行时间来排序通过vim的visual功能选择执行时间块(等号后面的数字),然后排序Total execution time (sec.ms) = 0.050590Total execution time (sec.ms) = 0.000170Total execution time (sec.ms) = 0.000247Total execution time (sec.ms) = 0.000292Total execution time (sec.ms) = 0.000474Total execution time (sec.ms) = 0.000330Total execution time (sec.ms) = 0.000348Total execution time (sec.ms) = 0.000279Total execution time (sec.ms) = 0.000385Total execution time (sec.ms) = 0.000296Total execution time (sec.ms) = 0.000261Total execution time (sec.ms) = 0.000195Total execution time (sec.ms) = 0.000226Total execution time (sec.ms) = 0.000227Total execution time (sec.ms) = 0.000193......:'<,'>!sort排序后的结果(部分)Total execution time (sec.ms) = 2.027776Total execution time (sec.ms) = 2.203624Total execution time (sec.ms) = 2.504677Total execution time (sec.ms) = 2.951256Total execution time (sec.ms) = 3.119875Total execution time (sec.ms) = 3.303277Total execution time (sec.ms) = 3.303517Total execution time (sec.ms) = 4.017133Total execution time (sec.ms) = 4.043329Total execution time (sec.ms) = 4.252125Total execution time (sec.ms) = 4.606765Total execution time (sec.ms) = 5.208087Total execution time (sec.ms) = 5.778598Total execution time (sec.ms) = 8.117470Total execution time (sec.ms) = 9797.905136可以看到最长时间的sql total执行时间耗费了3797.905123s.现在我们到dysqlstatus.out中去找这条语句Number of executions = 4602Number of compilations = 4294967295Worst preparation time (ms) = 2Best preparation time (ms) = 2Internal rows deleted = 0Internal rows inserted = 0Rows read = 2963688Internal rows updated = 0Rows written = 0Statement sorts = 0Statement sort overflows = 0Total sort time = 0Buffer pool data logical reads = Not CollectedBuffer pool data physical reads = Not CollectedBuffer pool temporary data logical reads = Not CollectedBuffer pool temporary data physical reads = Not CollectedBuffer pool index logical reads = Not CollectedBuffer pool index physical reads = Not CollectedBuffer pool temporary index logical reads = Not CollectedBuffer pool temporary index physical reads = Not CollectedTotal execution time (sec.ms) = 9797.905136Total user cpu time (sec.ms) = 9.290000Total system cpu time (sec.ms) = 1.230000Statement text = select * from XXXX_T_CNFACTIVITYDEF这条语句总共执行了4602次,平均每次的执行时间2S,而且这些数据应该是被cache 起来的;)总结:上面的方法简单总结了从数据库层面对应用的性能问题诊断,希望对大家有所帮助,对于数据库快照诊断问题的思路对于任意数据库通用补充一个unix上脚本处理方式:sqlsort.shawk 'BEGIN{RS="";FS="\n";ORS="\n"};/Statement text/{print $1, $21, $24}' $1 | awk '$5 > 0 {print "AvgTime:", $11/$5, "\t", $0}'| sort -n | head -n $2|awk '{print $0, "\n"}'使用:#sqlsort.sh dysqlstate.out 10(显示Top ten)用db2advis Sql语句调整建议用户名:db2inst1 //使用DB2用户或使用root用户登陆后切换用户到db2inst1用户密码: // # su - db2inst1建立一个mkdir sqltune目录1、$mkdir sqltune2、$ cd sqltune //进入sqltune文件夹3、$ pwd //显示当前目录/wrdb/db2inst1/sqltune4、编辑要分析sql语句(名字随意)//创建sql1.in文件保存需要分析的sql语句例如:$ vi sql1.in 把分析语句拷贝到sql1.in 注意sql1.in内容最后需要分号结尾。
db2 sql修改字段描述

db2 sql修改字段描述
在DB2中,要修改字段的描述,你可以使用ALTER TABLE语句来实现。
下面我会详细介绍这个过程。
首先,假设我们有一个名为“my_table”的表,其中有一个名为“my_column”的字段,现在我们想要修改它的描述。
首先,你需要使用以下SQL语句来查看字段的当前描述:
SELECT REMARKS.
FROM SYSIBM.SYSCOLUMNS.
WHERE TBNAME = 'my_table'。
AND NAME = 'my_column';
接下来,如果你想要修改字段的描述,你可以使用以下SQL语句:
ALTER TABLE my_table.
ALTER COLUMN my_column.
SET COMMENT '你的新描述';
在这里,你需要将“my_table”替换为你的表名,“my_column”替换为你想要修改描述的字段名,然后将“你的新描述”替换为你
想要设置的新描述。
执行这个SQL语句后,字段的描述就会被成功修改了。
需要注意的是,你需要有足够的权限来执行ALTER TABLE语句,否则你将无法修改字段描述。
另外,修改字段描述可能会影响到已
有的应用程序或者报表,所以在修改之前一定要慎重考虑。
DB2_SQL语言

– WHERE子句:指定查询条件
– GROUP BY子句:对查询结果按指定列的值 分组,该属性列值相等的元组为一个组。通常 会在每组中作用集函数。
– HAVING短语:筛选出只有满足指定条件的组
– ORDER BY子句:对查询结果表按指定列值的 升序或降序排序
• SELECT WORKDEPT, MAX(SALARY) AS MAXIMUM
• FROM EMPLOYEE • WHERE HIREDATE > '1979-01-01' • GROUP BY WORKDEPT • ORDER BY WORKDEPT DESC
• GROUP BY子句的作用对象是查询的中间 结果表
逻辑操作符
• AND • OR • NOT
• SELECT DEPT, NAME, JOB • FROM STAFF • WHERE JOB = 'Clerk' • AND DEPT = 20
3 排序
• 带ORDER BY从句
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] …
20000.00
• SELECT EMPNO, SALARY • FROM EMPLOYEES • WHERE SALARY NOT BETWEEN 10000.00
AND 30000.00
LIKE 模糊匹配
• 通配符: • _ 任意一个字符 • % 0或者若干个字符
• SELECT EMPNO, LASTNAME • FROM EMPLOYEE • WHERE LASTNAME LIKE 'S%'
db2语法手册

数据库的SQL语法参考手册一、DB2提供了关连式资料库的查询语言SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。
此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,包含了资料的定义(DDL)以及资料的处理(DML)。
SQL原来拼成SEQUEL,这语言的原型以“系统R“的名字在IBM圣荷西实验室完成,经过IBM 内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R的技术基础发展出来IBM的产品。
而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以IBM SQL为基础的标准关连式资料语言定义。
一、资料定义DDL(Data Definition Language)资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
1、建表格:CREATE TABLE table_name(column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],column2 DATATYPE [NOT NULL],...)说明:DATATYPE—是资料的格式,详见表。
NUT NULL—可不可以允许资料有空的(尚未有资料填入)。
PRIMARY KEY—是本表的主键。
2、更改表格ALTER TABLE table_nameADD COLUMN column_name DATATYPE说明:增加一个栏位(没有删除某个栏位的语法。
ALTER TABLE table_nameADD PRIMARY KEY (column_name)说明:更改表得的定义把某个栏位设为主键。
ALTER TABLE table_nameDROP PRIMARY KEY (column_name)说明:把主键的定义删除。
DB2错误代码SQL返回码-信息对照

用COBOL链接DB2时,出现DB2错误信息时,如果你不懂代码是什么意思,可以用这份资料查找,当然你也可以直接在db2的命令行下输入:db2 ? SQL30081N,系统会给出一些提示信息.sqlcode sqlstate DB2错误信息(按sqlcode排序)000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01545 未限定的列名被解释为一个有相互关系的引用+098 01568 动态SQL语句用分号结束+100 02000 没有找到满足SQL语句的行+110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统+111 01590 为2型索引设置了SUBPAGES语句+117 01525 要插入的值的个数不等于被插入表的列数+162 01514 指定的表空间被置为检查挂起状态+203 01552 使用非唯一的名字来解决命名的限定列+204 01532 命名的对象未在DB2中定义+206 01533 命名的列不在SQL语句中指定的任何表中存在+218 01537 因为SQL语句引用一个远程对象,不能为该SQL语句执行EXPLAIN+219 01532 命名的PLAN TABLE不存在+220 01546 不正确定义PLAN TABLE,检查命名列的定义+236 01005 SQLDA中的SQLN的值至少应于所描述的列的个数一样大+237 01594 至少有一个被描述的列应该是单值类型,因此扩展的SQLVAR 条目需要另外的空间+238 01005 至少应有一个被描述的列是一个LOB,因此扩展的SQLVAR条目需要另外的空间+239 01005 至少应有一个被描述的列应是单值类型,因此扩展的SQLVAR 条目需要另外的空间+304 01515 该值不能被分配给宿主变量,因为该值不再数据类型的范围之内+331 01520 不能被翻译的字符串,因此被设置为NULL+339 01569 由于与DB2 2.2版本的子系统连接,所以可能存在字符转换问题+394 01629 使用优化提示来选择访问路径+395 01628 设置了无效的优化提示,原因代码指定了为什么,忽略优化提示+402 01521 未知的位置+403 01522 本地不存在CREAT ALIAS对象+434 01608 在DB2未来发布的版本中将不支持指定的特性,IBM建议你停止使用这些特性+445 01004 值被CAST函数截取+462 01Hxx 由用户定义的函数或存储过程发出的警告+464 01609 命名的存储过程超出了它可能返回的查询结果集的个数限制+466 01610 指定由命名的存储过程返回的查询结果集的个数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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。