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阿