zoukankan      html  css  js  c++  java
  • 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),但是默认的注释方式是在行首加 # 号,这样,我们可以使用 # 号对无用行进行注释之后,在最后进行全局替换为 —- 来减少手动加注释的工作量。

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

     
  • 相关阅读:
    在IDEA通过Maven构建Scala项目
    6.Pair RDD操作
    5.RDD的Action操作和持久化persist()
    29.Spark SQL发展史
    AirFlow初始化的时候遇到 Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql
    4.RDD操作之Transform
    3.RDD详解和创建RDD方式
    28.Spark中action的介绍
    2.Spark 2.x 集群部署和测试
    Repeater分页
  • 原文地址:https://www.cnblogs.com/weilf/p/4539615.html
Copyright © 2011-2022 走看看