2013年(2)
分类: 数据库开发技术
2013-08-30 12:22:58
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”数据库在本工具的“数据库连接配置”中设置。
创建表(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,行间用“/”分隔,列间用“|”分隔,第一列表示数值(ID或CODE),第二列表示显示值(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 使用ISNULL、NVL函数时,要将该函数写在SUM外面,系统可以自动按数据库类型转换该函数(如在SQL2000上执行,遇到“NVL(SUM(”时,系统会自动转换为“ISNULL(SUM(”)。使用SUBSTRING、SUBSTR函数时,将左括号写到与该函数紧挨,本工具也会自动将该函数进行转换。在视图中能够自动转换的还有字符串的“+”号,自动与“||”转换。除了这些以后,不推荐使用的函数(按功能分):TRIM类、CONVER类、TO_NUMBER类、FLOAT类、VARCHAR_FORMAT类、TRUNCATE类(不含ROUND)、LEN类等多数据不兼容的函数。
u 在WHERE条件中判定一个字段为空的条件时,禁写“某字段=NULL”,应该写成“某字段 IS NULL”。
u 在WHERE条件中使用“>=”或“<=”时,禁止中间加空格如“> =”。
u 给字段起别名时,禁用“某字段=别名”,应该:“某字段 AS 别名”。
u “特指数据库类型”只能是“INFORMIX、SQLSERVER、ORACLE、SYBASE、ASA、DB2、MYSQL、DB2AIX、DERBY”中的一种。可以写多个,用半角逗号隔开。不填表示在所有数据库上执行。
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符即可与CT的END分开。
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
例2:SELECT 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)、BIT、BOOLEAN等。
1)、将数据库结构分四个文件书写:
第一个文件写创建表、创建视图、增加表字段、更改表字段类型与长度的代码;
第二个文件写创建主键、外键、索引的代码;
第三个文件写插入数据。
第四个文件写多数据库不兼容语句的代码如存储过程、触发器、序列(ORACLE/DB2);
以上文件在命名时最好用数字标明顺序,便于DT工具执行时顺利。
2)、可以在代码CREATE/INIT之前加备注信息:格式为://备注信息内容。
如果不想执行某段代码,可在代码CREATE/INIT所在行之前加"//",则//到此后第一个END之间的代码都不会执行。
3)、“豆腐”语法中,创建表的“说明”列,如果有外键关联字典列表,推荐在说明后面加中文括号和大写SELECT。如:“(SELECT ID,CODE,NAME FROM XXXXX WHERE XXXX ORDER BY CODE)”。这样会对以后版本的自动生成脚本中有帮助。
如果是枚举列表,则加中文括号和大写LIST,行中间用“/”分隔,列中间用“|”分隔,第一列表示数值(ID和CODE),第二列表示显示值(NAME)。如:“(LIST1|男/2|女/)”,再如:“(LIST1|正常/2|封存/)”。注意末尾的“/”不能省略。
4)、有些项目设计和开发已经开始,开发过程中希望启用本工具,通过本软件的从数据库逆向生成TXT文件,可以快速获得TXT,变成TXT -> DB的单向开发方法。逆向时,最好使用ORACLE数据库,可以使逆向出来的TXT具备中文注释(原理为从ORACLE的COMMENT取值)。
5)、如果您使用的TXT文件是使用“RCT逆向工程工具”从数据库导出来的,那么有可能在DATA文件的排序规则上存在先插外键表再插主键表的错误。解决方法是在按这些文件创建时,分多次创建,第一次只创建表结构和数据(不要创建索引、主、外键);第二次再创建索引、主、外键。也就是在第一次创建时,去掉索引、主键、外键的勾选。
6)、如果想要在PB中显示字段的中文说明,请在运行本软件之前,先用PB(6.5)连接一下新库,再使用本功能即可。
因为PB在连接库后会自动在新库中创建pbca*开头的表,来记录每个字段的中文说明。而本功能在建立表时会自动在这些表中插入说明记录。如果事先不用PB连接新库,则没有pbca*表,则在PB中查看表不会显示中文说明。
以下内容可以直接复制到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形成完整产业链叫豌豆。