DB2
文章平均质量分 75
shangboerds
淡薄以明志,宁静而致远
展开
-
DB2 SQL 精萃
----start 凡是知道数据库的人都知道SQL,凡是对SQL有一点了解的人都觉得SQL很简单,凡是有这种感觉的人都是SQL得初级用户,因为他学会了增查删改就以为这就是SQL的全部。目前的大部分应用软件都是以数据库为中心,随着软件的运行,数据量会越来越大。如何用简洁、高效的SQL语句操作数据显得越来越重要。本系列文章将给大家介绍常用的一些SQL技巧。(注意:这些技巧只适用于DB2)原创 2009-09-23 14:02:00 · 16764 阅读 · 4 评论 -
古之成大事者,不唯有超世之才,亦唯有坚忍不拔之志也!
----start----声明:本文转载牛新庄的《DB2数据库性能调整和优化》的前言部分。----出处:http://www.china-pub.com/computers/common/Catalog.asp?type=6&IDD=195576&shuming=DB2%u6570%u636E%u5E93%u6027%u80FD%u8C03%u6574%u548C%u4F18%u5316转载 2009-11-23 09:48:00 · 6879 阅读 · 0 评论 -
数组
----start DB2 从 9.5 开始支持数组。可以在存储过程和应用程序中使用数组,但不能在定义表的时候使用数组。一:定义数组语法:CREATE TYPE AS ARRAY[integer-constant] 例子:CREATE TYPE nar as INTEGER ARRAY[100];CREATE TYPE mynames as VARCHAR原创 2010-01-19 11:50:00 · 1645 阅读 · 0 评论 -
复合语句(compound statement)
----start 大多数程序设计语言使用大括号来定义复合语句,将大括号中的语句看做一个整体,SQL PL也可以定义复合语句,格式如下:语法:label: BEGIN [ATOMIC | NOT ATOMIC]--变量声明、过程逻辑等END label 示例1:P1:BEGIN DECLARE var1 INT; DECLARE var1 I原创 2010-01-20 15:57:00 · 3960 阅读 · 0 评论 -
IF 语句
----start 学过任何一种程序语言的人对IF语句应该都非常熟悉,下面我们看看SQL PL中IF语句的格式:一:语法IF THEN ;ELSEIF THEN ;ELSE ;END IF;二:示例--连接数据库CONNECT TO SAMPLE! --创建存储过程CREATE PR原创 2010-01-26 15:47:00 · 1512 阅读 · 0 评论 -
循环语句
----start SQL PL 支持的循环语句有 LOOP、WHILE、REPEAT 和 FOR。一:WHILE 循环 1、语法WHILE DO ;END WHILE; 2、示例--连接数据库CONNECT TO SAMPLE! --创建存储过程CREATE PROCEDURE TESTWHILE (OUT NUM INT)BE原创 2010-01-26 16:36:00 · 1845 阅读 · 0 评论 -
迁移存储过程
----start 如果我们想将 SQL 过程从一个服务器转移到另一个服务器,或者分享给他人又不想让他知道内容,那么,我们可以将存储过程的内容加密,可以通过 PUT ROUTINE 和 GET ROUTINE 命令来实现。一:GET ROUTINE命令GET ROUTINE 是一个 DB2 命令,它从数据库中提取一个 SQL 过程,并将它转换成一个 SAR(SQL Archive原创 2010-02-04 23:49:00 · 1875 阅读 · 0 评论 -
一个类似行转列的问题
----start在网上看到这样一个问题:(问题地址:http://bbs2.chinaunix.net/thread-1454869-1-7.html)有一个表T,内容如下:ID A B1 1 a2 2 b3 1 c4 1原创 2009-12-20 22:53:00 · 2393 阅读 · 0 评论 -
DB2 分页查询
----start提起分页查询,除了那些还不知道什么是分页的人,大多数人的都会想到一个词,那就是LIMIT,不过很可惜,DB2不支持这个关键字,那么DB2的分页查询到底该怎么写呢?只要你学会了OLAP函数,分页查询是非常简单的。即使你不会OLAP函数,按照下面的SQL照猫画虎也可以,如下:SELECT * FROM ( SELECT B.*, ROWNUMBER() OVER(原创 2009-09-24 08:41:00 · 8834 阅读 · 0 评论 -
尽量避免在SQL语句的WHERE子句中使用函数
----start 在SQL语句的 WHERE 子句中应该尽量避免在字段上使用函数,因为这样做会使该字段上的索引失效,影响SQL语句的性能。即使该字段上没有索引,也应该避免在字段上使用函数。考虑下面的情况:CREATE TABLE USER(NAME VARCHAR(20) NOT NULL,---姓名REGISTERDATE TIMESTAMP---注册时间);原创 2009-09-24 09:45:00 · 12244 阅读 · 0 评论 -
尽量避免在SQL语句中使用LIKE
----start 前面,我们介绍了 尽量避免在SQL语句的WHERE子句中使用函数,因为这样做会使该字段上的索引失效,影响SQL语句的性能。基于同样的道理,我们也应该避免使用LIKE。考虑下面的情况:CREATE TABLE USER(NAME VARCHAR(20) NOT NULL,---姓名MYNUMBER VARCHAR(18)---身份证号码); 现在原创 2009-09-24 16:09:00 · 3879 阅读 · 1 评论 -
DB2 函数概览
----startDB2 内置的函数真的是很多,要精通每个函数几乎是不可能的,所以本文并不打算介绍每个函数的具体用法,而是提供一个概览,让您了解每个函数的功能,这样,当你感觉你需要某些功能的函数时,再学习它们的具体用法也不迟。 DB2内置函数大体分为以下几类:聚合函数类型转换函数数学函数字符串函数日期时间函数XML 函数分区函数安全函数其他 下面我原创 2009-11-02 13:11:00 · 4620 阅读 · 0 评论 -
半角全角转换
----start DB2 的字符串数据类型有单字节和双字节之分。所以,当我们想把半角变成全角的时候,其实就是单字节变成双字节,运用我们之前学过的类型转换函数即可。有以下几个函数可用: GRAPHICVARGRAPHICLONG_VARGRAPHICDBCLOB例如:数字:VALUES VARGRAPHIC('1234567890');空格:VALUE原创 2009-10-19 16:23:00 · 3362 阅读 · 0 评论 -
GROUPING SETS、ROLLUP、CUBE
----start 大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那么本文不适合你。还记得当初学习SQL的时候,总是理解不了GROUP BY的作用,经过好长时间才终于明白GROUP BY的真谛。当然,这和我本人笨也有关系,但是GROUP BY的确不好理解。本文将介绍DB2 GROUPING SETS、ROLLUP、CUBE的使用方法,这些关键字比GROU原创 2010-01-15 12:49:00 · 12390 阅读 · 0 评论 -
在操作数据的同时查看操作前或操作后的值
----start我们经常需要对数据库进行插入、更新、删除等操作,如果我们想在更新数据的同时查看一下更新后的值,该怎么办呢?怎么样?是不是不太明白我说的话,不要紧,考虑下面的情况:CREATE TABLE USER ( NAME VARCHAR(20) NOT NULL,--姓名 SALARY FLOAT NOT NULL--工资 ); INSERT INTO原创 2009-11-05 13:07:00 · 1728 阅读 · 0 评论 -
DB2 Merge 语句的使用
----startDB2 Merge 语句的作用非常强大,它可以将一个表中的数据合并到另一个表中,在合并的同时可以进行插入、删除、更新等操作。我们还是先来看个简单的例子吧,假设你定义了一个雇员表(employe),一个经理表(manager),如下所示: ---雇员表(EMPLOYE)CREATE TABLE EMPLOYE (EMPLOYEID INTEGER NOT NU原创 2009-11-06 10:37:00 · 19194 阅读 · 4 评论 -
在FedaroCore4下安装DB2 Express-C
----start一:前提条件linux 版本:FedaroCore4DB2 版本:DB2 Express-C 9.5DB2必须使用root用户进行安装。 二:步骤1、将db2exc_952_LNX_x86.tar.gz 文件上传至/root/2、使用root用户登录系统,解压文件:tar xzvf /root/db2exc_952_LNX_x86.tar.gz原创 2009-11-05 16:06:00 · 1534 阅读 · 0 评论 -
DB CHNGPGS_THRES 参数
----start 之前看书的时候遇到这样一个问题,并不是每次commit都会使record写到磁盘上,而是当被修改的数据页数目达到了CHNGPGS_THRES 数值时,缓冲池中的这些修改的数据页记录就会被“具体化”或者被写到表空间磁盘上。如果这时系统突然停电了,怎么办?用户认为自己已经commit了,可是数据并没有写到磁盘上。 后来我在牛新庄的找到了答案,原来以上问原创 2009-12-29 16:52:00 · 1263 阅读 · 0 评论 -
DB2 用户管理
----startDB2 用户和其它数据库有些不同,DB2用户必须是个操作系统用户,所以要增加DB2用户需要下面2步:1、增加一个操作系统用户groupadd test---添加用户组testuseradd -m -g test -d /home/test test---添加用户testpasswd test---修改test的密码 2、赋予用户DB2权限db2 con原创 2009-11-10 11:26:00 · 3799 阅读 · 1 评论 -
DB2 精萃
---start古之成大事者,不唯有超世之才,亦唯有坚忍不拔之志也!DB2 认证路线图在FedaroCore4下安装DB2 Express-CDB2 目录结构DB2 配置DB CHNGPGS_THRES 参数DB2 安全性概述DB2 用户管理DB2 脚本锁升级失败将引起死锁遇到问题该如何解决DB2 SQL 精萃----声明:转载请注明出处。-原创 2009-11-05 16:50:00 · 4225 阅读 · 0 评论 -
SQL PL 精萃
----start SQL(Structured Query Language),也就是结构化查询语言,它被设计用来操作集合的,是非过程化的语言。随着应用程序的发展,业务逻辑越来越复杂,传统的SQL已经不能满足人们的要求,于是人们对SQL进行了扩展,使它具有了过程化的逻辑,即:SQL PL。SQL PL的全称是 SQL Procedural Language, 它是 SQL Persi原创 2010-01-13 12:49:00 · 4414 阅读 · 1 评论 -
触发器(Trigger)
----start 触发器和一个特定的表相关联,当向表中INSERTT、UPDATE、DELETE记录时,触发器会自动激活执行一些预定义的行为。一:语法: .-NO CASCADE-.>>-CREATE TRIGGER--trigger-name--+-+------------+--BEFORE-+-----原创 2010-02-09 14:31:00 · 1843 阅读 · 0 评论 -
ITERATE、LEAVE、GOTO和RETURN
----start 学习过任何一门编程语言的人对continue和break都不陌生。在SQL PL中,ITERATE和LEAVE实现相同的作用。RETURN的作用和大多数程序设计语言一样,用来将结果返回给它的调用者。另外,SQL PL中还支持GOTO语句,通常不建议使用GOTO,因为它会使程序混乱。一:语法ITERATE labelLEAVE labelGOTO label原创 2010-02-01 15:26:00 · 2581 阅读 · 0 评论 -
异常处理
----start 首先,我们了解一下什么是SQLCODE 与SQLSTATE: SQLCODE 是在每一条SQL 语句执行后收到的代码。这些值的意义如下:SQLCODE=0 该SQL执行成功SQLCODE>0 该SQL执行成功,但返回了一个警告SQLCODE<0 该SQL没有执行成功,并且返回了一个错误SQLCODE=100 未找到指定值原创 2010-02-01 16:23:00 · 2365 阅读 · 0 评论 -
内联 SQL PL(Inline SQL PL)
----start 通常SQL PL只能使用在存储过程、触发器、用户自定义函数中,但是有一部分SQL PL也可以直接在命令行编辑器或脚本中使用,它们是:DECLARE SETCASEFORGET DIAGNOSTICSGOTOIFRETURNSIGNALWHILEITERATELEAVE 以下SQL PL不能直接在命令行编辑器或脚本中使原创 2010-02-09 10:19:00 · 2256 阅读 · 0 评论 -
DB2 特殊寄存器(Special Registers)
----start所谓的特殊寄存器,其实就是一些变量,这些变量显示了DB2的一些状态信息,我们可以查看所有这些变量,也可以更新其中的一部分变量。查看方法:SELECT CURRENT TIME FROM sysibm.sysdummy1;VALUES CURRENT TIME; 更新方法:SET CURRENT SCHEMA = 'DB2ADMIN'; 以下是所有的特殊原创 2010-01-07 10:42:00 · 3193 阅读 · 0 评论 -
如何写出高效的SQL
----start 要想写出高效的SQL语句需要掌握一些基本原则,如果你违反了这些原则,一般情况下SQL的性能将会很差。 一:减少数据库访问次数 连接数据库是非常耗时的,虽然应用程序会采用连接池技术,但与数据库交互依然很耗时,这就要求我们尽量用一条语句干完所有的事,尤其要避免把SQL语句写在循环中,如果你遇到这样的人,应该毫不犹豫给他两个耳光。二:避免在有索引的字段原创 2009-12-05 12:49:00 · 2806 阅读 · 1 评论 -
DB2 行转列
----start在网上看到这样一个问题:(问题地址:http://www.mydb2.cn/bbs/read.php?tid=1297&page=e&#a)班级 科目 分数1 语文 88001 数学 84201 英语 7812……2 语文 87152 数学 85112 英语 8512原创 2009-12-16 20:42:00 · 19695 阅读 · 1 评论 -
定义临时集合(VALUES语句的使用)
----start 提起VALUES语句,很多人都感觉非常陌生,哈哈,看到下面的语句,你就会恍然大悟。INSERT INTO USER (NAME,BIRTHDAY) VALUES ('张三','2000-1-1'); 哦,原来这就是VALUES语句啊,没错,这就传说中的VALUES语句,那它有什么用途呢?正如我们文章的标题,它是用来定义临时集合的。我们先来看几个简单的VALU原创 2009-09-25 17:00:00 · 4544 阅读 · 4 评论 -
指定隔离级别
----start 大家应该都知道隔离级别吧,至少也应该听说过吧。DB2共有四种隔离级别,由高到低分别是:可重复读(RR)读稳定性(RS)游标稳定性(CS)---默认的隔离级别未落实的读(UR)隔离级别越低,并发性越好,但是导致的并发性问题也越多。DB2可以在 Session(会话级)、Connection(连接级)、Statement(语句级) 设定隔离级别。本原创 2009-09-29 00:11:00 · 1363 阅读 · 0 评论 -
表连接(JOIN)
----start 了解表连接的人,大概都觉得它很简单。其实简单只是它的外表,如果没有深刻理解Join语句,稍不留神就会有逻辑错误,逻辑错误比语法错误更难发现。 要想正确使用Join语句,有2个知识点是必须掌握的。第一:SQL语句执行的顺序FROMJOIN ONWHEREGROUP BYHAVINGSELECTORDER BYFETCH FI原创 2010-01-19 15:06:00 · 6237 阅读 · 2 评论 -
UNION, INTERSECT, EXCEPT
----start 这几个关键字是用来操作集合的。UNION用来求两个集合的并集,INTERSECT用来求两个集合的交集,EXCEPT用来求在第一个集合中存在,而在第二个集合中不存在的记录。每个关键字后面都可以接ALL(UNION ALL, INTERSECT ALL, EXCEPT ALL),如果不接ALL,操作集合将会去掉重复值,下面我们通过一个例子来对比一下它们直接的不同。---原创 2009-11-24 11:56:00 · 5587 阅读 · 1 评论 -
DB2 UPDATE 语句
----start我估计,只要是知道SQL语句的人都会用UPDATE语句,可是大部分人不知道UPDATE语句有两种写法,首先,考虑下面的情况:CREATE TABLE STUDENT ( ID INT,---学号 NAME VARCHAR(20) NOT NULL,---姓名 BIRTHDAY DATE---生日 primary原创 2010-01-09 14:54:00 · 54915 阅读 · 7 评论 -
在字符串中输入单引号
-- start字符串是用单引号括起来的,如果想在字符串输入单引号该怎么办呢?答案是用两个单引号代表一个单引号,如下SQL所示:VALUES 'hello, i''m wave'-- 更多参见:DB2 SQL 精萃-- 声明:转载请注明出处。-- last updated on 2009.10.24-- written by ShangBo on 2009.10.24原创 2009-10-24 09:41:00 · 7671 阅读 · 1 评论 -
DB2 中删除数据
----start 大家对如何删除数据都不陌生,我们习惯性的这么写:DELETE FROM WHERE ; 其实这么写性能并不好,尤其是删除大量数据的时候,要想获得更好的性能,可以采用如下方式:DELETE FROM(SELECT * FROM WHERE ); 那如果要把一个表的所有数据都删除了,该怎么办?有人可能会说,这简单啊,把WHERE子句去掉不就原创 2009-09-25 14:50:00 · 23964 阅读 · 2 评论 -
DB2 在线分析处理(OLAP函数的使用)
----start说起 DB2 在线分析处理,可以用很好很强大来形容。这项功能特别适用于各种统计查询,这些查询用通常的SQL很难实现,或者根本就无发实现。首先,我们从一个简单的例子开始,来一步一步揭开它神秘的面纱,请看下面的SQL:SELECT ROW_NUMBER() OVER(ORDER BY SALARY) AS 序号, NAME AS 姓名, DEPT原创 2009-10-28 15:56:00 · 12592 阅读 · 7 评论 -
DB2 临时表
----start 临时表(TEMPORARY TABLE)通常应用在需要定义临时集合的场合。但是,在大部分需要临时集合的时候,我们根本就不需要定义临时表。当我们在一条SQL语句中只使用一次临时集合时,我们可以使用嵌套表表达式来定义临时集合;当我们在一条SQL语句中需要多次使用同一临时集合时,我们可以使用公共表表达式;只有当我们在一个工作单元中的多条SQL语句中使用同一临时集合时,我们才原创 2010-01-27 11:14:00 · 18178 阅读 · 2 评论 -
将null值转化为其他值
----start 我个人认为数据库中不应该有null值,因为他颠覆了二值逻辑结构(即:真和假),出现了三值逻辑结构(即:真、假和未知)。由于null,我们的SQL语句很有可能出现意想不到的结果。此外null值和其他值进行数值运算的时候也会带来问题。但是,有时候有些事情并不是我们能够控制和改变的,作为一名真正的SQL开发者,应该敢于面对最垃圾的数据库设计。下面给大家介绍如何将null值转原创 2009-09-23 15:29:00 · 4063 阅读 · 1 评论 -
操作日期和时间
----start 我们都知道数字可以进行加、减、乘、除等运算。那么,日期可不可以呢?答案是,日期只能进行加、减运算。 在开始操作日期之前,我们得先了解DB2 支持哪些日期数据类型,如下所示: 类型格式TIMEhh:mm:ssDATEyyyy-mm-ddTIMESTA原创 2009-10-29 01:15:00 · 2613 阅读 · 1 评论 -
在ORDER BY 子句中加入主键或唯一键
----startORDER BY 子句非常简单,正因为简单,很多人不太在意,随意使用ORDER BY子句很可能出现逻辑错误,考虑如下情况:CREATE TABLE STUDENT( ID INT,---学号 NAME VARCHAR(20) NOT NULL,---姓名 BIRTHDAY DATE---生日 primary key(ID))原创 2010-01-09 14:13:00 · 2973 阅读 · 1 评论