Sybase脚本移植到DB2中

 

DB2

目前碰到一个任务,需要将原本基于Sybase的系统移植到DB2。前期工作中主要都是对SQL脚本的改写。鉴于目前对Sybase和DB2都不是很熟,所以开此记录日志。记录在过程中所遇到的各种问题。 

db2中的系统表介绍

DB2 Command Line Processor(DB2 CLP)是所有 DB2 产品中都有的,可以使用这个应用程序运行 DB2 命令、操作系统命令或 SQL 语句。

在 DB2 数据库被创建的时候,DB2 会创建一些系统表。这些系统表中记录了所有数据库对象的信息,表或视图的列的数据类型,约束的定义,对象的权限和对象之间的依赖关系等。这些系统表的模式为 SYSIBM,其表名以 SYS 作为前缀。例如: SYSTABLES、SYSVIEWS 等等。

DB2 为这些系统表建立了相对应的只读视图。这些视图的模式是 SYSCAT,它们的内容是其相对应的系统表的全部或者部分内容。这些视图的名字没有 SYS 的前缀。例如:SYSCAT.TABLES (是 SYSIBM.SYSTABLES 的视图。

我们可以通过 LIST TABLES FOR SYSTEM 或 LIST TABLES FOR SCHEMA schemaname 命令查看所有的系统表和相关的视图信息。下面我们会介绍一些本文用到的系统表和视图。

移植建表操作:

不需要改动的地方:

  • CHAR(30)
  • Varchar(30)
  • 简单SQL语句本身, select, create table, grant等等

需要修改的地方:

  • INT 改为: INTEGER
  • GO 改为: 封号 ;
  • CLUSTER NONCLUSTER 修改: 直接删除
  • tinyINTEGER tinyInt 修改: SMALLINT
  • smallInteger 修改: SMALLINT
  • exec 修改: 直接删除
  • Timestamp 修改: TIMESTAMP(10, 6)
  • varchar(30) char(30) 修改: 不用修改
  • money 修改: NUMERIC(19, 4)
  • print 修改: echo
  • image 修改: BLOB(1073741824)
  • TEXT 修改: CLOB(2147483647)

执行命令为

db2 -stvf tab.sql 

原先的Sybase SQL脚本文件如下:

存储过程

db2在创建或者更新存储过程的过程中,需要使用特殊的结束字符 @ 。

connect to oibsdb @  —- 连接到数据库 drop procedure sp_EXPLTTel @     —-  删除一个存储过程 create procedure sp_EXPLTTel (    —- 创建存储过程     IN I_deal_no            char(15),    —-     IN I_goods_services     varchar(6500),     INI_document_required   varchar(6500),     IN I_add_conditions     varchar(6500) ) LANGUAGE SQL    —- BEGIN     DECLARE v_Debug     CHAR(1)      default ‘0’ ;     DECLARE s_rtcd      INTEGER      DEFAULT 0;     DECLARE s_rtst      CHAR(5)      DEFAULT ‘00000’ ;     DECLARE s_text      VARCHAR(500) ; END 

db2脚本执行命令:

db2 -td@ -vf sp_EXPLTTel.sql but      —-进入db2控制台 select * from syscat.procedures where procname = ‘sp_EXPLTTel’ 

IDE UltraEdit

修改过程是一个比较辛苦的体力活。一些简单语法规则的不断重复改写,如何才能提高效率。 首先是利用UltraEdit的全局替换功能,寻找一些可以全局替换的元素做统一替换

  • print 替换为 echo
  • go 替换为 封号 ;
  • Sybase中原有C风格的注释进行全局替换 /*进行替换
  • int 替换为INTEGER, tinyInteger, tinyInt 替换为SMALLINT

DB2的SQL脚本中所支持的注释方式只有单行注释—-。UltraEdit中有类似eclipse中的多行快捷键注释功能(可以类似于eclipse中一样设置为快捷键Ctrl+Shift+C),但是默认的注释方式是在行首加 # 号,这样,我们可以使用 # 号对无用行进行注释之后,在最后进行全局替换为 —- 来减少手动加注释的工作量。

更进一步,有时候有些代码的缩进不是很规范,可以在该缩进的地方通过注释快捷键添加两个#号。然后将两个 ## 全局替换为四个空格,这样就迅速的实现了缩进操作。 

 
posted @ 2015-05-29 23:28  CC同学哈  阅读(368)  评论(0编辑  收藏  举报