Excel中用宏批量整理SQL脚本,生成ORACLE触发器语句(二)

2014-11-24 16:29:15 · 作者: · 浏览: 4
m(i) fieldStr = fieldStr + vbCrLf + clsField.fieldName Next i printFields = fieldStr End Function Function getTrgInsert(ByRef aCollection As Collection, ByVal destDb As String, ByVal tableName As String) As String Dim i As Integer Dim clsField As ClassField Dim trgSQL As String Dim trgWhere As String Dim fieldSQl As String Dim valuesSQL As String Dim sufExt As String sufExt = ":NEW" trgWhere = "" trgSQL = "CREATE OR REPLACE TRIGGER TRG_" & tableName & "_INS" & vbCrLf & _ " AFTER Insert " & vbCrLf & _ " ON " & tableName & vbCrLf & _ " FOR EACH ROW " & vbCrLf & _ " DECLARE v_count NUMBER;" & vbCrLf & _ " BEGIN " For i = 1 To aCollection.Count Set clsField = aCollection.Item(i) If trgWhere = "" Then trgWhere = clsField.fieldName + "=:NEW." + clsField.fieldName fieldSQl = clsField.fieldName valuesSQL = sufExt + "." + clsField.fieldName Else trgWhere = trgWhere + " and " + clsField.fieldName + "=" + sufExt + "." + clsField.fieldName fieldSQl = fieldSQl + "," + clsField.fieldName valuesSQL = valuesSQL + "," + sufExt + "." + clsField.fieldName End If Next i trgSQL = trgSQL & vbCrLf & " SELECT COUNT(*) INTO v_count FROM " + tableName + "@" + destDb + " WHERE " + trgWhere + ";" trgSQL = trgSQL & vbCrLf & " IF v_count = 0 THEN " trgSQL = trgSQL & vbCrLf & " insert into " + tableName + "@" + destDb + "(" + fieldSQl + ") values (" + valuesSQL + ");" trgSQL = trgSQL & vbCrLf & " end if;" trgSQL = trgSQL & vbCrLf & " END; " getTrgInsert = trgSQL End Function Function getTrgUpdate(ByRef aCollection As Collection, ByVal destDb As String, ByVal tableName As String) As String Dim i As Integer Dim clsField As ClassField Dim trgSQL As String Dim trgWhere As String Dim fieldSQl As String Dim valuesSQL As String Dim sufExt As String Dim sufExtOld As String sufExt = ":NEW" sufExtOld = ":OLD" trgWhere = "" trgSQL = "CREATE OR REPLACE TRIGGER TRG_" & tableName & "_UPT" & vbCrLf & _ " AFTER update " & vbCrLf & _ " ON " & tableName & vbCrLf & _ " FOR EACH ROW " & vbCrLf & _ " DECLARE v_count NUMBER;" & vbCrLf & _ " BEGIN " For i = 1 To aCollection.Count Set clsField = aCollection.Item(i) If trgWhere = "" Then trgWhere = clsField.fieldName + "=" + sufExtOld + "." + clsField.fieldName fieldSQl = clsField.fieldName + "=" + sufExt + "." + clsField.fieldName Else trgWhere = trgWhere + " and " + clsField.fieldName + "=" + sufExtOld + "." + clsField.fieldName fieldSQl = fieldSQl + "," + clsField.fieldName + "=" + sufExt + "." + clsField.fieldName End If Next i trgSQL = trgSQL & vbCrLf & " SELECT COUNT(*) INTO v_count FROM " + tableName + "@" + destDb + " WHERE " + trgWhere + ";" trgSQL = trgSQL & vbCrLf & " IF v_count >
0 THEN " trgSQL = trgSQL & vbCrLf & " update " + tableName + "@" + destDb + " set " + fieldSQl + " WHERE " + trgWhere + ";" trgSQL = trgSQL & vbCrLf & " end if;" trgSQL = trgSQL & vbCrLf & " END; " getTrgUpdate = trgSQL End Function Function getTrgDelete(ByRef aCollection As Collection, ByVal destDb As String, ByVal tableName As String) As String Dim i As Integer Dim clsField As ClassField Dim trgSQL As String Dim trgWhere As String Dim fieldSQl As String Dim valuesSQL As String Dim sufExt As String Dim sufExtOld As String sufExt = ":NEW" sufExtOld = ":OLD" trgWhere = "" trgSQL = "CREATE OR REPLACE TRIGGER TRG_" & tableName & "_DEL" & vbCrLf & _ " AFTER delete " & vbCrLf & _ " ON " & tableName & vbCrLf & _ " FOR EACH ROW " & vbCrLf & _ " DECLARE v_count NUMBER;" & vbCrLf & _ " BEGIN " For i = 1 To aCollection.C