说说db2数据库

               在公司做项目用到了db2数据库,以前没有用过这个数据库。熟悉oracle的朋友可能对数据库的逻辑结构和物理结构都比较熟悉,db2数据库在这方面和oracle也是没有什么太大的区别的。

               db2数据库有着自己的独特的优势,他的链接管理以及备份等工作之后会慢慢讲述,下面首先说一下它在语句上面和oracle的几点区别:

 

1、DB2 访问前10行数据与Oracle区别

 

DB2 :   

 

select * from test fetchfirst 10 rows only

 

Oracle :  

 

select * from test whererownum<=10

 

查询语句

 

Db2:不提供隐形转换

 

select * from employeewhere empno=1010;

 

oracle:提供隐形转换

 

select * from employeewhere empno='1010';

 

 

 

2、DB2 Insert into与Oracle区别

 

DB2 允许有类似这样多行插入:

 

insert into staffvalues(1212,'cemy',20,'sales',3,90000,30000);

 

(1212,'cemy',20,'sales',3,90000,30000);

 

oracle: 

 

SQL>  insert into staffvalues(1212,'cemy',20,'sales',3,90000,30000),(1212,'cemy'

 

,20,'sales',3,90000,30000)

 

                                                   

 

3、DB2 Update 与OracleUpdate

 

Db2

 

DB2 update staff set(salary,comm)=(80000,50000);

 

DB2 update staff setsalary=80000,comm=50000;

 

Oracle:

 

SQL> update staff setsalary=80000,comm=50000;

 

已更新1 行。

 

4、取得系统日期

 

Oracle:

 

Select sysdate from dual;

 

DB2:

 

Select current timestampfrom sysibm.sysdummy1;

 

 

 

5、转换日期时间到字符类型:

 

Oracle 

 

TO_CHAR(date_expression_r_r,'YYYY-MM-DD') 

 

TO_CHAR(date_expression_r_r,'HH24:MI:SS') 

 

DB2 

 

CHAR(date_expression_r_r,ISO) 

 

CHAR(time_expression_r_r,ISO)

 

 

 

6、转换日期时间字符串到日期时间类型:

 

Oracle  :

 

TO_CHAR(date_expression_r_r,'YYYY-MM-DD') 

 

TO_CHAR(date_expression_r_r,'HH24:MI:SS') 

 

DB2  :

 

DATE('2005-05-20') 

 

TIME('18:59:59') 

 

TIEMSTAMP('2007-2-1','21:12:12') 

 

TIEMSTAMP('2007-2-121:12:12')

 

    

 

DB2也有TO_CHAR 和TO_DATE函数,但只能提供固定的转换格式,如下

 

TO_CHAR(timestamp_expression_r_r,'YYY-MM-DD HH24:MI:SS') 

 

TO_DATE(string_expression_r_r, 'YYY-MM-DD HH24:MI:SS')

 

 

 

7、快速清空大表

 

Oracle:

 

truncate table TableName;

 

DB2:

 

alter table TableNameactive not logged initially with empty table;

 

 

 

8、创建类似表

 

Oracle:

 

create table a as select* from b ;

 

DB2:

 

create table a like b ;

 

 

 

9、修改字段长度或类型:

 

ORACLE:

 

ALTER TABLE NODES MODIFYNODE_NAME varchar(32);

 

DB2:

 

alter table NODES ALTERNODE_NAME SET DATA TYPE varchar(32);

 

 

 

10、空值处理得到abc

 

Oracle:

 

SELECT 'abc' || c1 FROMt1 (c1 IS NULL) 

 

DB2 :

 

SELECT 'abc‘ ||COALESCE(c1,'') FROM t1

 

 

 

11、创建 indexes

 

Oralce:

 

Create TABLE T1.............IN DATA_TA

 

Create Index ........ ONT1  ...... IN INDX_TS

 

    

 

DB2:

 

Create TABLE T1 ........IN DATA_TS INDEX IN INDX_TS

 

Create INDEX  .....ON T1

 

 

 

12、更改列名

 

oracle :

 

alter table test renamecolumn mail to mail2;

 

db2 

 

不提供更改列名功能(解决办法同删除,或者通过建立一个新视图解决)

 

13、更改列类型

 

oracle :alter table testmodify column (mail2 integer);

 

db2    :alter table test alter mail varchar(256)只可以加宽,不能更改类型

 

 

 

14 创建PROCEDURE的参数的区别

 

1)参数类型和参数名称的位置不同

 

db2:

 

CREATE PROCEDURE PRO1 (INOrgID int)

 

oracle:

 

CREATE PROCEDURE PRO1(OrgID IN int)

 

2)同时作为输入输出参数的写法不同

 

db2:  

 

CREATE PROCEDURE PRO1(INOUT OrgID int)    INOUT连着写

 

oracle:   

 

CREATE PROCEDURE PRO1(OrgID IN OUT int)    INOUT中间空格隔开,而且必须IN在OUT之前

 

3)没有输入或输出参数时

 

db2: 

 

CREATE PROCEDURE PRO1()   

 

oracle:

 

CREATE PROCEDURE PRO1不能有空的括号

 

 

 

变量定义和BEGIN END体的位置不同

 

        db2中变量定义在BEGINEND体内,并且每个变量都要用DECLARE声明;存储过程结束时,END后跟P1,并且不需要分号

 

        oracle中变量定义必须在BEGINEND体外,变量都不需要用DECLARE声明(有种说法是,第一个变量需要DECLARE,其他变量不需要);存储过程结束时,END后跟存储过程的名称,并且需要分号       

 

 db2:

 

CREATE PROCEDURE PRO1()

 

 LANGUAGE SQL   

 

       P1: BEGIN

 

          --变量定义

 

           DECLARE INSERT_DATE TIMESTAMP;

 

           DECLARE ALLDEPT_NO  VARCHAR(20);

 

           --具体操作  

 

           SELECT a FROM TAB_1;

 

                          .........

 

            END P1

 

oracle: 

 

CREATE PROCEDURE PRO1

 

          IS

 

         --变量定义

 

         INSERT_DATE TIMESTAMP;

 

         ALLDEPT_NO  VARCHAR(20);

 

          BEGIN

 

            --具体操作

 

         SELECT a FROM TAB_1;

 

                       .........

 

         END PRO1;

 

 

15、控制语句的不同

 

 db2:   

 

 IF …THEN ......ELSEIF THEN .... END IF;

 

 oracle:

 

IF …THEN ......ELSIF  THEN .... END IF;

 

 

 

16、如何执行脚本SQL文件

 

Oracle:

 

@$PATH/filename.sql;

 

DB2:    

 

db2 -tvf$PATH/filename.sql

 

 

 

17、查看当前用户的表和视图

 

DB2:

 

LIST   TABLES

 

ORACLE:  

 

SELECT   *  FROM   TBAB;

 

 

 

DB2:DROP   TABLE删除表和定义。LIST   TABLES发现表不存在了。

 

ORACLE:DROP   TABLE删除表的内容保留表的定义。可以看到表。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值