powerdesigner中运用vbscript批量生成触发器脚本

本文介绍了一段使用PD脚本语言批量生成Oracle数据库触发器的方法。通过递归遍历模型中的所有表,并针对含有特定列名的表,自动生成更新时间戳的触发器脚本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pd中设计工作中经常有些工作需要批量执行修改,采用其自带的脚本语言是个不错的选则,下面这段脚本根据表结构的查询需要生成oracle的触发器的列,对其生成相应的触发期脚本,可以直接执行


Option Explicit
ValidationMode = True
InteractiveMode = im_Batch
''ceaate by runnerrunning
' get the current active model
Dim mdl ' the current model
Set mdl = ActiveModel

 

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

   Dim aaa

   Set aaa = fso.OpenTextFile ("c://aaaa1.TXT", 2, True)'ceaate by runnerrunning
   If aaa is Nothing then
   output "errors file"
   return
   end if

If (mdl Is Nothing) Then
   MsgBox "There is no Active Model"
Else
   ListObjects(mdl)
   aaa.close
End If

'-----------------------------------------------------------------------------
' Sub procedure to scan current package and print information on objects from current package
' and call again the same sub procedure on all children pacakge
' of the current package
'-----------------------------------------------------------------------------
Private Sub ListObjects(fldr) '列出所有的对象
   'output "Scanning " & fldr.code
   Dim obj ' running object
   For Each obj In fldr.children
      ' Calling sub procedure to print out information on the object
      'DescribeObject obj
      TableSetComment obj'ceaate by runnerrunning
   Next

//本人原创runnerrunning@163.com转载请保留本信息
//http://blog.youkuaiyun.com/runnerrunning
//大家看了别忘了点右边的广告阿支持一下runnerrunning@163.com

   ' go into the sub-packages
   Dim f ' running folder
   For Each f In fldr.Packages '递归调用列出所有的对象
      'calling sub procedure to scan children package
      ListObjects f
   Next
End Sub
'ceaate by runnerrunning
'-----------------------------------------------------------------------------
' Sub procedure to print information on current object in output
'-----------------------------------------------------------------------------
Private Sub DescribeObject(CurrentObject)
   if not CurrentObject.Iskindof(cls_NamedObject) then exit sub
   'output "Found "+CurrentObject.ClassName+" """+CurrentObject.Name+""", Created by "+CurrentObject.Creator+" On "+Cstr(CurrentObject.CreationDate)  
End Sub
'ceaate by runnerrunning
Private Sub TableSetComment(CurrentObject)
   if not CurrentObject.Iskindof(cls_Table) then exit sub
   'output "Found "+CurrentObject.ClassName+" """+CurrentObject.Name+""", Created by "+CurrentObject.Creator+" On "+Cstr(CurrentObject.CreationDate)  
      if not CurrentObject.isShortcut then
         Dim col ' running column
         for each col in CurrentObject.columns
            if UCase(col.code)="MDF_TM" THEN
               'output CurrentObject.NAME
               'OUTPUT RIGHT(CurrentObject.CODE,LEN(CurrentObject.CODE) - 1)
              
               'OUTPUT
               'OUTPUT "--表"&CurrentObject.NAME&" MDF_TM BEFORE UPDATE 触发器"
               'OUTPUT "--TR_MDF_"&CurrentObject.CODE&"_1"
               'OUTPUT "DROP TRIGGER TR_MDF_"&CurrentObject.CODE&"_1"
               'OUTPUT "/"
               'OUTPUT "--  BEFORE UPDATE TRIGGER TR_MDF_"&CurrentObject.CODE&"_1 FOR TABLE "&CurrentObject.CODE
               'OUTPUT "CREATE TRIGGER TR_MDF_"&CurrentObject.CODE&"_1 BEFORE UPDATE"
               'OUTPUT "ON "&CurrentObject.CODE&" FOR EACH ROW"
               'OUTPUT "BEGIN"
               'OUTPUT " :NEW.MDF_TM := SYSDATE;"
               'OUTPUT "END;"
               'OUTPUT "/"
              
               aaa.WriteLine("")
               aaa.WriteLine( "--表"&CurrentObject.NAME&" MDF_TM BEFORE UPDATE 触发器")
               aaa.WriteLine( "--TR_MDF_"&CurrentObject.CODE&"_1")
               aaa.WriteLine( "DROP TRIGGER TR_MDF_"&CurrentObject.CODE&"_1")
               aaa.WriteLine( "/")
               aaa.WriteLine( "--  BEFORE UPDATE TRIGGER TR_MDF_"&CurrentObject.CODE&"_1 FOR TABLE "&CurrentObject.CODE )
               aaa.WriteLine( "CREATE TRIGGER TR_MDF_"&CurrentObject.CODE&"_1 BEFORE UPDATE")
               aaa.WriteLine( "ON "&CurrentObject.CODE&" FOR EACH ROW")
               aaa.WriteLine( "BEGIN")
               aaa.WriteLine( " :NEW.MDF_TM := SYSDATE;")
               aaa.WriteLine( "END;")
               aaa.WriteLine( "/")
              
            END IF
         next
      end if  
  
End Sub
//本人原创runnerrunning@163.com转载请保留本信息
//http://blog.youkuaiyun.com/runnerrunning
//大家看了别忘了点右边的广告阿支持一下runnerrunning@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值