PowerDesigner笔记及VBS代码示例
程序员文章站
2024-03-22 11:21:22
...
根据源数据库导出的SQL文件生成物理模型:file-reverse engineer-database,DBMS选择SQL文件的来源数据库类型,确定,use script files可以添加多个sql文件
根据已有模型生成目标数据库的物理模型:tools- generate PDM,DBMS选择目标数据库的类型,selection中可以选择导入哪些表。
调整模型
- 修改用户:model-user and role,删除原有用户,创建新用户scott,为下一步做准备
- 修改表名、索引名:model-tables,最大化后为name逐个加上前/后缀,将表的owner都改为scott;model-indexes,最大化后为name逐个加上前/后缀,将表的owner都改为scott
- 去除导出SQL的双引号:database-edit current DBMS-general-script-sql-format-CaseSensitivityUsingQuote,选择no
- 加字段:在第一个表中手动加字段,选中新加的字段,右键-edit-copy,双击其他表-columns,选到最后一行-ctrl+v,即可为每一行批量加字段
生成SQL:database-generate database,general-设置导出路径,options-去除database/user/role的导出勾选,去除table/key/index的drop语句,去除format-title的勾选可以不生成开头的注释
自动排列:symbol-auto layout
执行VB脚本:tools-execute command-edit/run script
dim model
set model = ActiveModel
mainProcess model
'主程序
'*****************************************************************************
sub mainProcess(model)
'修改表所有者,需要先创建该名称的所有者
p_ChangeTableOwner model,"dw_stage"
for each table in model.tables
'增加字段
p_AddColumn table,"ods_clt_date","DATE"
p_AddColumn table,"modifier_no","VARCHAR2(20)"
'为表名加前后缀
p_ChangeTableName table,"","_dffa3"
'修改特定类型的字段为另一种类型
p_ChangeColumnDataType table,"NUMBER(1)","NUMBER(19,0)"
'修改索引名称
p_ChangeIndexName table,"","_dffa3"
'修改键名称
p_ChangeKeyName table,"","_dffa3"
next
end sub
'功能:增加字段
'*****************************************************************************
sub p_AddColumn(table,colname,coltype)
dim col
Set col=table.Columns.CreateNew
col.name = colname
col.code = colname
'col.comment = ""
col.DataType = coltype
end sub
'功能:为表名加前后缀
'*****************************************************************************
sub p_ChangeTableName(table,pre,post)
table.name=pre+table.name+post
table.code=pre+table.code+post
end sub
'功能:修改特定类型的字段为另一种类型
'*****************************************************************************
sub p_ChangeColumnDataType(table,fromType,toType)
dim col
for each col in table.Columns
if(UCase(col.dataType)=fromType) then
col.dataType=toType
end if
next
end sub
'功能:修改表的所有者
'*****************************************************************************
sub p_ChangeTableOwner(model,owner)
for each usr in model.Users
if usr.Code = owner then '需要先在PDM内新建一个该名称的用户
for each n in model.Tables
set n.Owner = usr
next
exit for
end if
next
end sub
'功能:修改索引名称
'*****************************************************************************
sub p_ChangeIndexName(table,pre,post)
for each inx in table.indexes
inx.name= pre+inx.name+post
inx.code= pre+inx.code+post
next
end sub
'功能:修改键名称
'*****************************************************************************
sub p_ChangeKeyName(table,pre,post)
for each k in table.keys
k.name= pre+k.name+post
k.code= pre+k.code+post
next
end sub