zoukankan      html  css  js  c++  java
  • Oracle与DB2数据类型的对应

       首先,通过下表介绍ORACLE与DB2/400数据类型之间的对应关系,是一对多的关系,具体采用哪种对应关系,应具体问题具体分析。

      注意事项:

      DATE and TIME

      Oracle中的DATE含有年、月、日、时、分、秒,它和DB2/400中的DATE不相互对应,DB2/400中的DATE只有年、月、日,TIME类型含有时、分、秒,因此日期和时间类型要进行转换,请参照下表。

    Oracle
    DB2/400
    Oracle数据类型
    注意事项 DB2 UDB数据类型 注意事项
    DATE   DATE
    TIME
    TIMESTAMP l
    如果只使用MM/DD/YYY,那么使用DATE类型。
    l 如果只使用HH:MM:SS, 那么使用TIME类型。
    l 如果要使用日期和时间,则使用时间戳类型(TIMESTAMP)
    l 可以使用Oracle中的TO_CHAR()函数来取DATE的字串来分别与DB2/400的DATE、TIME相匹配。
    VARCHAR2(n) n<=4000
    CHAR(n)
    VARCHAR(n) l
    若n<=32766,则使用DB2/400中的CHAR类型、VARCHAR
    LONG n<=2GB VARCHAR(n)
    CLOB(n) l
    若n<=32K,则使用DB2/400中的CHAR类型、VARCHAR。
    l 若32K=< n <=2GB,则使用CLOB。
    ROW&
    LONG ROW
    n<=255 CHAR(n) FOR BIT DATA
    VARCHAR(n) FOR BIT DATA
    BLOB(n) l
    若n<=32K, 则使用CHAR(n) FOR BIT DATA 或
    VARCHAR(n) FOR BIT DATA
    l 若n<=2GB, 则使用BLOB(n)
    BLOB
    n<=4GB BLOB(n) 若n<=2GB, 则使用BLOB(n)
    CLOB
    n<=4GB CLOB(n) 若n<=2GB, 则使用CLOB(n)
    NCLOB
    n<=4GB DBCLOB(n) 若n<=2GB, 则使用DBCLOB(n/2)
    NUMBER   SMALLINT/INTEGER/BIGINT

    DECIMAL(p,s)/NUMBER(p,s)

    Float(n)/ REAL/DOUBLE l
    若Oracle中定义NUMBER(p) 或 NUMBER(p,s), 则使用SAMLLINT/INTEGER/BIGINT
    l 若Oracle中定义NUMBER(p,s), 则使用DECIMAL(p,s)
    l 若Oracle中定义NUMBER,则使用FLOAT(n)/REAL/DOUBLE

      NUMBER

      Oracle中的NUMBER类型可以对应DB2/400中的很多类型,这种对应关系要依赖于Oracle中number将用于保存何种类型的数据,是整型还是带有小数位的实型数据,另外还要考虑类型所占用的存储空间,例如:SAMLLINT占2 byte, INTEGER占4 byte; BIGINT占8 byte;Oracle中的NUMBER类型所占用的存储空间要根据它的定义而定,例如缺省精度下的NUMBER有38个数字长,占用20 byte的空间。具体的对应关系请参照上表。

      ROW and LOB类型

      DB2/400提供VARCHAR和CLOB与ORACLE中的RAW和LONG RAW相对应。ORACLE也支持大对象:BLOB、CLOB、CLOB和NCLOB, ORACLE中的BLOB和CLOB可以提供4GB的空间,而DB2/400中的BLOB和CLOB只能存放2GB的数据;DB2/400中的DBCLOB与ORACLE中的NCLOB 2GB相对应。Oracle 中的BFILE数据类型用于管理数据库以外的二进制数据,数据库中的表将指向数据库外部的存放的BFILE文件,DB2/400也提供一个类似的数据类型DATALINK相对应。

      ROWID

      Oracle ROWIND虚拟列用于对表中的某一列进行唯一标示,DB2/400中也有这样的数据类型ROWID,它与ORACLE中的ROWID的功能相似。DB2/400中的ROWID可以存放40 byte的数据用来唯一标示表中的每一行,它没有ccsid属性,这些信息中没有关于datafile、 block 或 row的信息。

      例如:

      CREATE TABLE LIBRARYNAME/ORDERS2 (ORDERNO ROWID, SHIPPED_TO VARCHAR (36) , ORDER_DATE DATE) ORDERNO的数据类型为ROWID,用于存放订单号,每当插入一行时,系统自动生成一个值,存放进这个字段。可以用OPERATION NAVIGATOR查看它的内容。

      Character type

      DB2/400的CHAR、VARCHAR类型与ORACLE中的VARCHAR2(n)类型相对应,但是ORACLE中的VARCHAR2(n)类型仅用于存放较小的字符串,这里的n小于4000,因此在这种情况下,最好用定长的CHAR(N)类型与ORACLE的VARCHAR2(n)相对应,这样不仅可以提高效率,还可以节省存储空间,若使用VARCHAR(n)类型最好用ALLOCATE参数,这样可以提高数据库的性能,它可以减少内存和硬盘之间的输入/输出操作。

      要注意DB2/400中的字符串中文输入问题,要想在DB2/400上输入中文应用这样的SQL创建表,这里的CCSID 935,代表简体中文。

      例如:

      CREATE TABLE MYLIB/ZHONG (HANZI CHAR (30 ) CCSID 935 NOT NULL WITHDEFAULT)

  • 相关阅读:
    UVa 10118 记忆化搜索 Free Candies
    CodeForces 568B DP Symmetric and Transitive
    UVa 11695 树的直径 Flight Planning
    UVa 10934 DP Dropping water balloons
    CodeForces 543D 树形DP Road Improvement
    CodeForces 570E DP Pig and Palindromes
    HDU 5396 区间DP 数学 Expression
    HDU 5402 模拟 构造 Travelling Salesman Problem
    HDU 5399 数学 Too Simple
    CodeForces 567F DP Mausoleum
  • 原文地址:https://www.cnblogs.com/kfarvid/p/1672750.html
Copyright © 2011-2022 走看看