欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PowerDesigner笔记及VBS代码示例

程序员文章站 2024-03-22 11:21:22
...

根据源数据库导出的SQL文件生成物理模型:file-reverse engineer-database,DBMS选择SQL文件的来源数据库类型,确定,use script files可以添加多个sql文件

根据已有模型生成目标数据库的物理模型:tools- generate PDM,DBMS选择目标数据库的类型,selection中可以选择导入哪些表。

调整模型

  1. 修改用户:model-user and role,删除原有用户,创建新用户scott,为下一步做准备
  2. 修改表名、索引名:model-tables,最大化后为name逐个加上前/后缀,将表的owner都改为scott;model-indexes,最大化后为name逐个加上前/后缀,将表的owner都改为scott
  3. 去除导出SQL的双引号:database-edit current DBMS-general-script-sql-format-CaseSensitivityUsingQuote,选择no
  4. 加字段:在第一个表中手动加字段,选中新加的字段,右键-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

 

相关标签: ETL