powerdesigner简单使用

批量修改表名+schema

vb里面好像没有!=的功能?我之前疯狂报错,直到把"!=“改成了”<>";

table中的字段名,似乎用下面的界面就可以调用;

在这里插入图片描述

推荐找一些vbs的语法记录看一下

批量加入前缀后,所有的表名竟然有了双引号,而且是把前缀一起包起来的那种双引号,目前的解决方案是利用Ctrl+R批量替换;

😄``2021年3月11日10:31:42`

以上问题修正了,原因是因为之前在vbs里修改表名的时候,是写成了:

tabname="TK_APP.DOC_"&table.name

应该是因为那个点的原因,导致他把整个表名都包在了双引号下,因为它识别不了这种前缀schema,后来探索了一下,如果要批量加schema的话,需要利用图形界面,首先我们将上面的代码改成:

tabname="DOC_"&table.name

然后,选中表结构,右键选择properties属性,在弹出的对话框里,选择General选项卡,在下面的owner行中,新建一个用户名,这个就是schema了。

在这里插入图片描述

然后,在进行“Database Generation“的时候,点击”Format“选项卡,选择上”owner prefix“,

在这里插入图片描述

这时候再去Preview一下DDL,会发现表名已经没有引号了,变成了:

在这里插入图片描述

大功告成。

Informatica导出的DDL,每套create下应该加分号,否则会被解析成一整个create;

批量设置表的所有者user

上面的方法没法统一设置所有者,只能一个个右键属性来查看,下面有一个比较笨的方法:

在这里插入图片描述

model->tables:, 点击属性一个个改动。

--------------------------------------2021年3月18日10:19:44---------------------------------------

找到了一种更好的方式,利用vbs脚本来做:

首先要新建一个user,注意pdm中大小写敏感,一定要设置成大写的user!

在模型上右键New,即:

在这里插入图片描述

然后戳user:

在这里插入图片描述

填写user名:

在这里插入图片描述

能在模型下面的Users文件夹里看到新建的user就可以,

在这里插入图片描述

然后在vbs脚本中设置批量修改table的属主owner:

Dim Model
set MyModel = ActiveModel 
 
for each usr in MyModel.Users 
	if usr.Code = "xxx" then '在这修改属主,而且要先在PD内新建一个cbpdata用户
        for each n in MyModel.Tables 
            set n.Owner = usr 
        next 
        exit for 
        end if 
next 

大功告成。

参考文献:PowerDesigner使用VBScript脚本设置表属主

字段名被截断

powerdesigner里,如果字段的名称太长的话,会默认被截断,比如说,

表结构里字段名是:

在这里插入图片描述

结果generate之后是:

在这里插入图片描述

这是因为powerdesigner默认的字段名长度为30,超过30之后的会被截断。

所以把字段名长度的限制改大就可以了。

Database->edit current dbms,然后修改script->objects->column->maxlen里面,value的值即可,设置大一些,直接255;

在这里插入图片描述

参考文献:

PowerDesigner中修改建表语句中字段长度限制

脚本执行

在这里插入图片描述

在tools->execute commands -> edit/run script下执行vbs脚本,我已经写好了一个自动扩容加自动加tablename前缀的,内容如下:

'*****************************************************************************  
     '文件:powerdesigner.ucase.VBs  
     '版本:1.0  
     '功能:遍历物理模型中的所有表,将表名、表代码、字段名、字段代码全部由小写改成大写;  
' 并将序列的名和代码由小写改成大写;字段扩容;表名前缀;设定schema;
     '用法:打开物理模型,运行本脚本(Ctrl+Shift+X)  
     '备注:  
     '*****************************************************************************  
     dim model 'current model  
     set model = ActiveModel  
    If (model Is Nothing) Then  
     MsgBox "There is no current Model"  
     ElseIf Not model.IsKindOf(PdPDM.cls_Model) Then  
     MsgBox "The current model is not an Physical Data model."  
     Else  
     ProcessTables model  
     'ProcessSequences model  
     End If  
    '*****************************************************************************  
     '函数:ProcessSequences  
     '功能:递归遍历所有的序列  
     '*****************************************************************************  
     sub ProcessSequences(folder)  
     '处理模型中的序列:小写改大写  
     dim sequence  
     for each sequence in folder.sequences  
     sequence.name = UCase(sequence.name)  
     sequence.code = UCase(sequence.code)  
     next  
     end sub  
    '*****************************************************************************  
     '函数:ProcessTables  
     '功能:递归遍历所有的表  
     '*****************************************************************************  
     sub ProcessTables(folder)  
     '处理模型中的表  
     dim table  
     dim user
    for each user in model.Users   '批量修改属主姓名,即schema
         if user.Code="app" then
            for each table in folder.tables
               set table.owner=user
               next
            exit for
         end if
     next
     for each table in folder.tables  
         if not table.IsShortCut then   
            ProcessTable table  
         end if  
        table.code = "DOC_"+UCase(table.code)	'表名统一加前缀DOC_
     next  
     '对子目录进行递归  
     dim subFolder  
     for each subFolder in folder.Packages  
     ProcessTables subFolder  
     next   
    end sub  
    '*****************************************************************************  
     '函数:ProcessTable  
     '功能:遍历指定table的所有字段,将字段名由小写改成大写,  
     ' 字段代码由小写改成大写  
     ' 表名由小写改成大写   
    '*****************************************************************************  
     sub ProcessTable(table)  
     dim col  
     for each col in table.Columns  
     '将字段名由小写改成大写  
     'col.code = UCase(col.code)  
     'col.name = UCase(col.name)
     if col.length<>0 Then 
            col.length = col.length * 2 '字段自动扩容,翻倍
     end if
     next   
    table.name = UCase(table.name)  
     table.code = UCase(table.code)  
     end sub

2021年3月18日10:30:28 新增功能,可批量修改属主Owner,但需要提前在模型内建好对应的User。

参考文献

  1. Powerdesigner SqlServer转Oracle(转) 举了几个脚本的例子,但格式和讲解并不好;
  2. 通过编写PowerDesigner脚本功能批量修改属性 格式清晰,备注全面,虽然只是讲了一个小例子,但是五脏俱全,个人感觉,PD脚本应该有的模式它都有了;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值