Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8139
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-30 12:08
文章分类
文章存档

2013年(2)

我的朋友

分类: 数据库开发技术

2013-08-30 12:22:58

 

CT数据库无损升迁(Create Table)

 

         JAVA的理念是让应用程序“Write Once,Run Anywhere”。

CT的理念是让应用程序“Write Once,Run Any Database”。

功能描述

本软件定义了一套数据库描述语法,以TXT(或EXCEL)格式呈现。通过本软件,将描述文件(代号为“豆腐”),在数据库上自动生成数据库对象。对象包括表、主键、外键、索引、视图、存储过程、触发器、序列和初始数据。

本软件会自动比对描述文件与数据库之间的差异,将缺少的表、字段等对象补上,而不会删除任何对象。即使重复执行,也不会对数据库造成损伤。

ORACLE数据库上执行时,会将描述文件中的表和字段的中文注释写入COMMENT

每次运行,本软件会记录对数据库的所有有效更改操作,日志文件名为“ctlog_yyyy-mm-dd hh:mm.txt”。

文件格式说明

支持文本文件(TXT)EXCEL两种格式。如果是文本文件(TXT),各列之间采用一个TAB符分割;如果是EXCEL,各列对齐即可。

命令行运行参数

通过命令行方式启动,实现直接在数据库上执行“豆腐”文件,而无需人机交互。

命令行参数:

a_datatranslate.exe -S[数据库别名] -F[文件名]

例如:

a_datatranslate.exe –Sd1 –Fabc.txt”表示在“d1”数据库上运行“abc.txt”,“d1”数据库在本工具的“数据库连接配置”中设置。

CT(豆腐)语法

创建表(TXT格式):

CREATETABLE[TAB]表名[TAB]说明[TAB]主键字段(可空)[TAB]主键名(可空)

字段名1[TAB]说明[TAB]类型[TAB]可为空(Y/N)[TAB]外键关联的表名.字段名[TAB]外键名

字段名2[TAB]说明[TAB]类型[TAB]可为空(Y/N)[TAB]外键关联的表名.字段名[TAB]外键名

字段名3[TAB]说明[TAB]类型[TAB]可为空(Y/N)[TAB]外键关联的表名.字段名[TAB]外键名

END

创建表(EXCEL格式,与上面TXT格式完全相同):

CREATETABLE

表名

说明

主键字段(可空)

主键名(可空)

字段名1

说明

类型

可为空(Y/N)

外键关联的表名.字段名

外键名

字段名2

说明

类型

可为空(Y/N)

外键关联的表名.字段名

外键名

字段名3

说明

类型

可为空(Y/N)

外键关联的表名.字段名

外键名

END

 

 

 

 

注:

u  主键名默认规则:PK_[表名],左截取28位长

u  自动创建唯一索引名默认规则:I_[表名],左截取28位长

u  外键名默认规则:FK_[本表名]_[字段],左截取28位长

u  如果需要创建复合外键,使用“外键关联的表名.字段名1,字段名2”即可

u  如果该表中有两个以上字段使用的是另一张表的单一外键,必须要注明外键名,否则系统会认为是复合外键

u  如果某字段有外键关联字典列表,推荐在“说明”后面加中文括号和大写SELECT。如:“(SELECT ID,CODE,NAME FROM XXXXX WHERE XXXX ORDER BY CODE)”。这样会对SSC生成脚本有帮助。如果该字段是枚举列表,则加中文括号和大写LIST,行间用“/”分隔,列间用“|”分隔,第一列表示数值(IDCODE),第二列表示显示值(NAME)。如:“(LIST1|/2|/)”。注意末尾的“/”不能省略。

u  在“可为空(Y/N)”后可增加DEFAULT语法。例如下面表示A字段默认为2:“A A字段    NUMERIC(1,0)  N[2]

创建索引(TXT格式):

CREATEINDEX[TAB]表名[TAB]索引名[TAB]是否唯一(U为唯一索引,不填为可重复索引)

字段名(用逗号分隔)

END

更改字段类型长度(TXT格式):

ALTERTABLETYPE[TAB]表名

字段名[TAB]类型长度[TAB]可为空(Y/N)

END

创建视图(TXT格式):

CREATEVIEW[TAB]视图名[TAB]说明[TAB]特指数据库类型(可空)

创建语句(此语句为创建视图的标准SQL语句,不能省略视图字段和()

u  注意:为了生成JAVA脚本和规范性检查方便,在视图字段说明后的“AS”要单独一行编写;视图的字段名必须要列出,不能省略;字段要单独写一行,字段不要和“CREATE VIEW XXX”中任何一个字符写在同一行。

u  使用ISNULLNVL函数时,要将该函数写在SUM外面,系统可以自动按数据库类型转换该函数(如在SQL2000上执行,遇到“NVL(SUM(”时,系统会自动转换为“ISNULL(SUM(”)。使用SUBSTRINGSUBSTR函数时,将左括号写到与该函数紧挨,本工具也会自动将该函数进行转换。在视图中能够自动转换的还有字符串的“+”号,自动与“||”转换。除了这些以后,不推荐使用的函数(按功能分)TRIM类、CONVER类、TO_NUMBER类、FLOAT类、VARCHAR_FORMAT类、TRUNCATE类(不含ROUND)、LEN类等多数据不兼容的函数。

u  WHERE条件中判定一个字段为空的条件时,禁写“某字段=NULL”,应该写成“某字段 IS NULL”。

u  WHERE条件中使用“>=”或“<=”时,禁止中间加空格如“> =”。

u  给字段起别名时,禁用“某字段=别名”,应该:“某字段 AS 别名”。

u  “特指数据库类型”只能是“INFORMIXSQLSERVERORACLESYBASEASADB2MYSQLDB2AIXDERBY”中的一种。可以写多个,用半角逗号隔开。不填表示在所有数据库上执行。

u  请不要将注释语句(如--姓名)写入视图创建语句,否则会造成逆向功能不灵。视图的注释应该在CREATEVIEW上一行采用“//--”符号注释即可。建议在视图前,必须用注释写明各字段的中文含义。

u  注意:视图长度不得大于7000字节。因为视图若越长,会降低本工具将其逆向的成功率,也降低在各种数据库间迁移的成功率;若超出7000多就肯定不能逆向和迁移了。

END

创建触发器(TXT格式):

CREATETRIGGER[TAB]触发器名[TAB]说明[TAB]特指数据库类型(可空)

创建语句(此语句为创建触发器的标准SQL语句)

END

创建存储过程(TXT格式):

CREATEPROCEDURE[TAB]存储过程名[TAB]说明[TAB]特指数据库类型(可空)

创建语句(此语句为创建存储过程的SQL语句)

u  因为某些数据库的创建存储过程的SQL语法中有END,所以在编制此类CT时只需要在创建SQL语句中的END前加以TAB符即可与CTEND分开。

END

创建序列(TXT格式):

CREATESEQUENCE[TAB]序列名[TAB]说明[TAB]特指数据库类型(可空)

创建语句(此语句为创建序列的SQL语句)

END

创建其它对象(TXT格式):

CREATEOTHER[TAB]对象名[TAB]说明[TAB]特指数据库类型(可空)

DROP语句加分号表示执行

创建语句(此语句为创建对象的SQL语句)

也可以将经常更新的存储过程写在这里,这样每次运行则更新存储过程)

END

插入字典数据(TXT格式):

INITDATA[TAB]表名[TAB]执行条件(可不填)[TAB]SQL语句前缀(默认空)

INSERT语句(此语句为插入表的标准SQL语句,只有当执行条件结果为0时执行。

u  建议SQL语句不要一次写太多,如果需要写大量SQL,可以分条件分批写。

u  @TABLENAME表示表名;

u  @PREFIX 表示SQL语句前缀;

u  @CLSS_TO_DATE表示日期格式转换(用法:@CLSS_TO_DATE(2004-07-01));

u  @NOW表示当前时间(使用时不需要@CLSS_TO_DATE配合)

u  每条SQL语句必须以分号(半角)结尾;

u  为了兼容ORACLE,字符串要用单引号表示,不能用双引号;

u  执行条件可以不填,默认为SELECT COUNT(*) FROM @TABLENAME

END

其中,执行条件为SQL语句

1(默认)SELECT COUNT(*) FROM @TABLENAME

2SELECT COUNT(*) FROM @TABLENAME WHERE ID>='10'

技巧:

依上原理,在此处也可以写UPDATE语句。

验证数据

CHECK[TAB]表名[TAB]验证SQL语句(当返回值大于0时提示)

中文提示信息。

u  @CLSS_COUNT代表数量。

END

仍然有效但不推荐使用的语法:

创建主键(TXT格式)(不推荐的原因:在“创建表”的语法中已经有创建主键的语法,完全不需要本语法,在此列出仅是为提供主键的第二种表达方式):

CREATEPRIMARYKEY[TAB]表名[TAB]主键名

字段1,字段2...(用逗号分隔)

END

创键外键(TXT格式)(不推荐的原因:在“创建表”的语法中已经有创建外键的语法,完全不需要本语法,在此列出仅是为提供外键的第二种表达方式):

CREATEFOREIGNKEY[TAB]外键表名[TAB]外键名

主键表名[TAB]外键字段名(用逗号分隔)[TAB]主键字段名(用逗号分隔,如果为空是与外键字段名相同)

END

推荐数据类型

整型(长整型)INT

字符串:CHAR/VARCHAR

日期:DATETIME

数值:NUMERIC(##,#)

二进制对象:BLOB

自增列:IDENTITY(如果是ORACLE,则自动增加序列和触发器)

具体业务软件开发中,推荐字段类型规则:

金额字段,建议NUMERIC(18,2)

利率字段,建议NUMERIC(18,6)

ID、数量字段,建议NUMERIC(18,0)

姓名字段,建议VARCHAR(100)

身份证号字段,建议VARCHAR(18)

地址、单位名称、备注字段,建议VARCHAR(255)

标记字段(即BOOLEAN),建议NUMERIC(1,0),值为“0/1”或“null/1”(H3平台标准目前为1|/2|/)。不建议CHAR(1)BITBOOLEAN等。

使用技巧

1)、将数据库结构分四个文件书写:

第一个文件写创建表、创建视图、增加表字段、更改表字段类型与长度的代码;

第二个文件写创建主键、外键、索引的代码;

第三个文件写插入数据。

第四个文件写多数据库不兼容语句的代码如存储过程、触发器、序列(ORACLE/DB2)

以上文件在命名时最好用数字标明顺序,便于DT工具执行时顺利。

2)、可以在代码CREATE/INIT之前加备注信息:格式为://备注信息内容。

如果不想执行某段代码,可在代码CREATE/INIT所在行之前加"//",//到此后第一个END之间的代码都不会执行。

3)、“豆腐”语法中,创建表的“说明”列,如果有外键关联字典列表,推荐在说明后面加中文括号和大写SELECT。如:“(SELECT ID,CODE,NAME FROM XXXXX WHERE XXXX ORDER BY CODE)”。这样会对以后版本的自动生成脚本中有帮助。

如果是枚举列表,则加中文括号和大写LIST,行中间用“/”分隔,列中间用“|”分隔,第一列表示数值(IDCODE),第二列表示显示值(NAME)。如:“(LIST1|/2|/)”,再如:“(LIST1|正常/2|封存/)”。注意末尾的“/”不能省略。

4)、有些项目设计和开发已经开始,开发过程中希望启用本工具,通过本软件的从数据库逆向生成TXT文件,可以快速获得TXT,变成TXT -> DB的单向开发方法。逆向时,最好使用ORACLE数据库,可以使逆向出来的TXT具备中文注释(原理为从ORACLECOMMENT取值)。

5)、如果您使用的TXT文件是使用“RCT逆向工程工具”从数据库导出来的,那么有可能在DATA文件的排序规则上存在先插外键表再插主键表的错误。解决方法是在按这些文件创建时,分多次创建,第一次只创建表结构和数据(不要创建索引、主、外键);第二次再创建索引、主、外键。也就是在第一次创建时,去掉索引、主键、外键的勾选。

6)、如果想要在PB中显示字段的中文说明,请在运行本软件之前,先用PB(6.5)连接一下新库,再使用本功能即可。

因为PB在连接库后会自动在新库中创建pbca*开头的表,来记录每个字段的中文说明。而本功能在建立表时会自动在这些表中插入说明记录。如果事先不用PB连接新库,则没有pbca*表,则在PB中查看表不会显示中文说明。

CT(豆腐)范例(TXT格式)

以下内容可以直接复制到TXT中,使用本工具运行。

//创建数据表A_XIA_DWXX(单位信息表)

CREATETABLE  A_XIA_DWXX   单位信息表     DWDM

DWDM     单位代码         VARCHAR(20)  N

DWMC     单位名称         VARCHAR(20)  N

DWDZ      单位地址         VARCHAR(20)  Y

DH   单位电话         VARCHAR(20)  N

END

//创建数据表A_XIA_GRXX(个人信息表)

CREATETABLE  A_XIA_GRXX    个人信息表     DWDM,GRDM

DWDM     单位代码         VARCHAR(20)  N      A_XIA_DWXX.DWDM

GRDM      个人代码         NUMERIC(10,0)       N

XM   姓名         VARCHAR(20)  N

XB    性别(LIST1|/2|/        INT   Y

ZT     状态(SELECT ID,ZTSM FROM A_ZT  Y       A_ZT.ID

RQ    开户日期         DATETIME        Y

END

CREATETABLE  A_ZT         个人状态枚举         ID

ID     枚举代码         INT   N

ZTSM        状态说明         VARCHAR(20)  N

END

//创建主键(单位信息表)(由于前面已标示,在此列出属多余)

CREATEPRIMARYKEY       A_XIA_DWXX   PK_A_XIA_DWXX

DWDM

END

//创建主键(个人信息表)(由于前面已标示,在此列出属多余)

CREATEPRIMARYKEY       A_XIA_GRXX    PK_A_XIA_GRXX

DWDM,GRDM

END

//创建视图

CREATEVIEW   A_VIEW_GRXX         某视图

CREATE VIEW A_VIEW_GRXX

(DWDM)

 AS

SELECT DISTINCT DWDM

FROM A_XIA_GRXX

END

//创建外键(单位信息表)(由于前面已标示,在此列出属多余)

CREATEFOREIGNKEY        A_XIA_GRXX    FK_A_XIA_GRXX_DWDM

A_XIA_DWXX   DWDM     DWDM

END

//创建索引(个人信息表)(由于前面已标示为主键,建立主键前会先建索引,在此列出属多余)

CREATEINDEX A_XIA_GRXX    I_A_XIA_GRXX          U

DWDM,GRDM

END

//创建索引(由于标识为主键,可以省略)

CREATEINDEX A_XIA_DWXX   I_A_XIA_DWXX        U

DWDM

END

//更改字段长度(单位信息表)

ALTERTABLETYPE     A_XIA_DWXX

DWMC     VARCHAR(30)  N

DWDZ      VARCHAR(50)  Y

END

//插入单位数据,按完整一条SQL写法

INITDATA A_XIA_DWXX

INSERT INTO A_XIA_DWXX (DWDM,DWMC,DWDZ,DH,XM2,XB2) VALUES ('001','单位名称','单位地址','电话','联系人','');

END

//插入状态枚举数据,使用@TABLENAME关键字代表A_ZT表,使用@PREFIX代表SQL前缀

INITDATA A_ZT         SELECT COUNT(*) FROM @TABLENAME         INSERT INTO A_ZT (ID,ZTSM) VALUES

@PREFIX (1,'正常');

@PREFIX (2,'封存');

END

//插入个人数据,省略执行条件。使用@CLSS_TO_DATE关键字插入日期型数据。

INITDATA A_XIA_GRXX             INSERT INTO A_XIA_GRXX (DWDM,GRDM,XM,XB,ZT,RQ) VALUES

@PREFIX ('001',1,'张三',1,1,@CLSS_TO_DATE(2001-01-01));

@PREFIX ('001',2,'李四',1,1,@CLSS_TO_DATE(2001-01-01));

END

//创建视图

//字段为:单位代码,人数

CREATEVIEW   VA_DWXX         单位视图

CREATE VIEW VA_DWXX

(DWDM,RS)

AS

SELECT DWDM,(SELECT COUNT(*) FROM A_XIA_GRXX WHERE DWDM=A_XIA_DWXX.DWDM)

FROM A_XIA_DWXX

END

“豆腐”杂谈

Allowtype.TXT就是豆腐皮了。

不能用的CT.TXT,叫“豆腐渣”;

不能用的,且把别人搞生气的CT,叫“臭豆腐”;

精品CT,叫“豆腐脑”;

局部片段,叫“豆腐丝”;

长期稳定使用,不出毛病的,叫“豆腐干”;

大家都用CT,叫豆腐宴;

所以,叫豆腐很好,很中国。

编制CT的过程叫磨豆腐;

女性写的CT叫麻婆豆腐;

美女写的质量还好的CT叫豆腐花;

写好了没用上的CT叫豆腐汤;

CT时间太长了,半天写不好,叫豆浆;

后来CT开始在别的项目(如担保项目)上使用了,产生了额外的收入,叫豆奶;

崇拜豆腐的人,叫豆粉;

不会写CT的,是生手,叫豆瓣!

胖子写的CT叫大豆;

当兵的写的CT叫绿豆;

名星写的叫红豆;

煤炭行业的CT叫黑豆;

日本人写的CT叫黄豆;

欧洲人写的CT都叫荷兰豆;

18岁以下写的CT叫青豆;

成功集成CT的开发平台叫豆角。

CT形成完整产业链叫豌豆。

阅读(2487) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:多数据库兼容,为什么要使用CT

给主人留下些什么吧!~~