`

再次开刷IBM的垃圾

阅读更多
最近因为公司项目需要,必须使用DB2,因为原来一起用Oracle MySQL的,使用了DB2才知道什么叫数据库中的垃圾,而且是臭气熏天的垃圾!

罪状之1:更改表结构超级麻烦

假设有以下一个表:
   create table t1(a int,b int c int,d int);

你希望删除b,c,d新增e,f
   alter table t1 drop column b;
   alter table t1 drop column c;
   alter table t1 drop column d;
   alter table t1 add e int;
   alter table t1 add f int;

   这是一个再简单不过的表结构更改语句了,在DB2中一执行,到第4行居然就报错了,错误是:
引用
SQL20054N  所处的状态对该操作无效.原因码 23

   查了http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.messages.sql.doc/doc/msql20054n.html?cp=SSEPGG_9.7.0%2F2-6-27-19-45&lang=zh-cn
   才知道,DB2拥有一个如果恶心的限制:
引用

    对表结构更改最多只能做3次,3次后必须要求你执行reorg命令!!!


   也就是说,你必须在第3和第4句之间手工加入:
   alter table t1 drop column b;
   alter table t1 drop column c;
   alter table t1 drop column d;
   reorg table t1;/*这里要你手工插入*/
   alter table t1 add e int;
   alter table t1 add f int;
   reorg table t1;/*为了防止后续的更改出错,全体变更完成后,你还要在这里手工插入*/

  
    这种完全可以由DB2自己内部去做的事情,居然要踢给用户手工去做,完全不顾使用者的感受,学院主义,官僚主义暴露无遗啊!


罪状之2:数据分页

mysql直接使用limit x,y 就可以实现分页了:

select * from table limit 10,20 


Oracle通过子查询实现分页:
select * from (select rownum,name from table where rownum <=endIndex ) where rownum > startIndex 


下面再来看看DB2的分页:
select * from ( select ROW_NUMBER() OVER( ORDER BY DOC_UUID DESC ) AS ROWNUM,t.*  
from DT_DOCUMENT  t ) a 


    看到那串神奇的ROW_NUMBER() OVER( ORDER BY DOC_UUID DESC )没有,如果你需要按序排序,DB2要求你写这个奇怪的语法。想想将一个普通的SQL转换为分页的SQL有多难啊。(幸亏Hibernate的Dialect类可以帮忙我们完成,否则会吐血三升而亡的

DB2的罪状,还很多啦,后续不断补充上,很欢迎大家涮涮IBM那一群群头上长角,浑身长刺的怪胎。
分享到:
评论
3 楼 starpeng 2016-10-30  
sqlserver也是这样的分页,这样的分页有个好处支持partition关键字。
这都不算啥,建议接触过informix再来喷IBM。
2 楼 lydawen 2016-02-15  
coobery 写道
哈哈,我之前做异构数据库迁移的其实最痛苦的是DB2,其次是sqlserver。



我还用过sybase呢,分页只能使用临时表来做,当时是sybase 15,不知道现在好了没
1 楼 coobery 2014-05-21  
哈哈,我之前做异构数据库迁移的其实最痛苦的是DB2,其次是sqlserver。

相关推荐

    IBM JDK5垃圾收集策略

    在IBM JDK 5中,垃圾收集(Garbage Collection, GC)是Java平台中至关重要的一个部分,用于自动管理内存,确保程序高效运行。垃圾收集策略的选择直接影响到应用程序的性能,特别是对于WebSphere Application Server...

    IBM服务器刷微码程序

    "IBM服务器刷微码程序"就是一个专为IBM服务器设计的工具,用于更新服务器内部的固件或微代码(Microcode)。微码是嵌入在硬件中的低级指令集,它负责解释和执行CPU和其他硬件组件的高级指令。这个过程通常被称为微码...

    IBM JDK5 垃圾收集策略

    IBM JDK5 提供了四种不同的垃圾收集(GC)策略,以适应不同类型的Java应用程序需求。这些策略包括: 1. 针对吞吐量优化(-Xgcpolicy:optthruput):这是默认策略,适用于那些对整体运行速度(吞吐量)要求高于短暂...

    IBM反垃圾邮件解决方案

    美讯智邮件信息安全网关在 IBM x335 服务器上进行了严格的性能和压力测试,测试结果证明在双路 CPU 的 x335 服务器上能够有效的支持每秒 200 封邮件的吞吐量。作为 x335 服务器的新一带产品的 X336 服务器相对于 x...

    IBM THINKPAD X61刷BIOS支持STAT2

    标题中的“IBM THINKPAD X61刷BIOS支持STAT2”指的是对IBM ThinkPad X61笔记本电脑的BIOS(基本输入输出系统)进行更新,以增加对SATA(串行ATA)第二代接口的支持。BIOS是计算机硬件与操作系统之间的一个低级程序,...

    ThinkPad HMD 1.69 IBM刷号软件

    IBM THINKPAD 刷号 刷机机器,机器的SN号和TYPE号都可以刷写进去.

    IBM-Weather.rar_IBMweather_IBM天气预报_ibm天气_天气预报 IBM

    【IBM世界地图时间天气预报】是一款由IBM公司提供的专业天气预报工具,它集成了IBM的先进数据分析技术和全球气象数据,为用户提供精准、实时的全球天气信息。这款软件以地图的形式展示世界各地的天气状况,帮助用户...

    IBM5150_IBM5150说明图纸_ibm5150_图纸_

    IBM5150是IBM公司于1981年推出的第一代个人计算机,它标志着现代个人计算机时代的开端。这款机器的型号全称为IBM Personal Computer 5150,简称为IBM PC或IBM5150。IBM5150说明图纸深入地揭示了这款历史性的计算机...

    传统IBM桌面 IBM壁纸

    【IBM桌面】是个人计算机用户界面的一个重要组成部分,它展示了操作系统的基本视觉元素,包括桌面背景、图标、任务栏以及各种小部件。IBM作为一家历史悠久的科技巨头,其桌面设计不仅体现了公司的品牌形象,还反映了...

    IBM V3500开关机流程.docx

    "IBM V3500开关机流程详解" 作为一名IT行业大师,我将详细解释IBM V3500开关机流程的相关知识点。 开关机流程的重要性 在使用IBM V3500存储系统时,正确的开关机流程是非常重要的,因为它可以确保数据的安全和...

    IBM SVC软件安装和配置指南-中文版_IBMSVC软件安装和配置指南-中文版_IBMSVC管理口IP_ibmsvc管理口_I

    IBM SVC(Storage Volume Controller)是IBM推出的一种存储虚拟化解决方案,它允许用户通过一个中央管理接口来管理和控制多个存储设备。本指南将详细介绍IBM SVC软件的安装与配置过程,包括管理口IP的设置以及初始化...

    IBM POS诊断盘刷新4610打印机微码和字库

    IBM POS诊断盘是一种专门用于IBM零售点(Point of Sale)系统的工具,主要用于诊断、维护和更新IBM的POS设备,特别是4610型号的打印机。这个工具包含了多种实用功能,如设备添加、固件更新和字库刷新,帮助用户确保...

    IBM DS5020存储开关机顺序.docx

    ### IBM DS5020 存储系统开关机顺序详解 #### 一、概述 IBM DS5020是一款高性能的存储解决方案,适用于各种规模的企业。为了确保系统的稳定性和数据的安全性,在对DS5020进行开关机操作时,需要遵循一定的顺序。...

    ibm jdk1.6 ibm 64

    IBM Webpshere 8.5.0ND版自带的商业JDK,版本信息如下: java version "1.6.0" Java(TM) SE Runtime Environment (build pwa6460_26sr2ifix-20120419_02(SR2+IV19661)) IBM J9 VM (build 2.6, JRE 1.6.0 Windows ...

    ibm jdk diagnostic reference

    IBM JDK诊断参考指南是针对IBM Developer Kit和Runtime Environment,Java技术版的第6版的诊断指南文档。这份指南包括了Java虚拟机(JVM)的基础知识,以及如何使用IBM JDK进行Java应用的诊断。 首先,文档提到...

    IBM MQ7.5_jar包

    Java连接IBM WebSphere MQ 7处理队列信息所需jar包,从安装目录直接打的包。主要包括: /com.ibm.mq.commonservices.jar /com.ibm.mq.defaultconfig.jar /com.ibm.mq.fta.jar /com.ibm.mq.headers.jar /...

    IBM所有产品Visio图标

    IBM-3D、IBM-iDataPlex、IBM-IO-Cards、IBM-Logos、IBM-Network-BNT、IBM-Network-B-Type、IBM-PDU、IBM-Racks、IBM-SAN、IBM-Server-BladeCenter、IBM-Server-FlexSystem、IBM-Server-Power、IBM-Server-Systemi、...

    IBM V5000存储配置.doc

    "IBM V5000存储配置" IBM V5000 存储配置是 IBM 公司开发的一款企业级存储解决方案,旨在满足中大型企业的数据存储需求。通过本文档,我们将对 IBM V5000 存储配置进行详细的说明,帮助用户快速上手使用 IBM V5000...

    IBM_MQ下载

    IBM WebSphere MQ,通常简称为IBM MQ,是IBM公司提供的一款高效、可靠的企业级消息中间件产品。它在企业系统间传输数据,确保了数据的可靠传输和事务处理,是构建分布式系统和实现异构环境间通信的重要工具。在本...

Global site tag (gtag.js) - Google Analytics