方法一:PLSQL + POWER DESIGNER + PDMREADE
1、从PLSQL中导出表结构,点击TOOL==>export user objects ,导出文件名为test.sql
注意,因为公司要求只需要表格,根据要求User 选择IRCP ,type选择TABLE ,通过shift 全选,将storage owner 不选,直接导出文件到桌面。
2、打开PowerDesigner
单击File---->Reverse Engineer---->Database
设值文件名并选择数据库类型
选择之前导出的test.sql,单击确定,这步因为数据量比较大,很慢,耐心等待即可!
成功生成PDM文件后的窗口如上图,然后右键PhysicalDataModel_1,单击save as
另存为test.pdm
3、打开PDMReader,单击文件--->打开*.pdm数据字典文件,选择之前导出的test.pdm文件,最后右键PhysicalDataModel_1.pdm,文件导出--->导出到word
若无法打开.pdm文档,建议关闭后重新打开一次即可,或者需要更新软件
方法二 直接使用SQL语句筛选 ,结合Excel宏将各表分开,最后通过超链接函数(比较复杂,耗时严重,手动较多)
1、将表结构导出,按住表格左上角然后右键 导出Excel
SELECT OWNER, TABLE_NAME AS "表名", COMMENTS AS "表注释" FROM ALL_TAB_COMMENTS where owner = 'IRCP' ORDER BY TABLE_NAME
------查询出所有表,导出Excel ,作为基表存在
select
B.TABLE_NAME AS "F表名",
C.COMMENTS AS "表说明",
B.COLUMN_ID AS "字段序号",
B.COLUMN_NAME AS "字段名",
B.DATA_TYPE AS "字段数据类型",
A.COMMENTS AS "字段描述"
FROM
ALL_COL_COMMENTS A,
ALL_TAB_COLUMNS B,
ALL_TAB_COMMENTS C
WHERE
A.TABLE_NAME IN (SELECT U.TABLE_NAME FROM USER_ALL_TABLES U)
AND A.OWNER = B.OWNER
AND A.TABLE_NAME = B.TABLE_NAME
AND A.COLUMN_NAME = B.COLUMN_NAME
AND C.TABLE_NAME= A.TABLE_NAME
AND C.OWNER = A.OWNER
AND A.OWNER = 'IRCP'
/* AND A.TABLE_NAME = 'ABNORMAL_TRAN_MONITOR'*/
ORDER BY A.TABLE_NAME ,B.COLUMN_ID
-----查询出所有表名称和每个表内容,导出Excel ,供之后使用宏拆分
2、打开目标excel,按alt + f11键打开VBE窗口
选择插入->模块粘贴下面代码到编辑器中
3、输入下面这段语句
Sub 保留表头拆分数据为若干新工作簿()
Dim arr, d As Object, k, t, i&, lc%, rng As Range, c%
c = Application.InputBox("请输入拆分列号", , 4, , , , , 1)
If c = 0 Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
arr = [a1].CurrentRegion
lc = UBound(arr, 2)
Set rng = [a1].Resize(, lc)
Set d = CreateObject("scripting.dictionary")
For i = 2 To UBound(arr)
If Not d.Exists(arr(i, c)) Then
Set d(arr(i, c)) = Cells(i, 1).Resize(1, lc)
Else
Set d(arr(i, c)) = Union(d(arr(i, c)), Cells(i, 1).Resize(1, lc))
End If
Next
k = d.Keys
t = d.Items
For i = 0 To d.Count - 1
With Workbooks.Add(xlWBATWorksheet)
rng.Copy .Sheets(1).[a1]
t(i).Copy .Sheets(1).[a2]
.SaveAs Filename:=ThisWorkbook.Path & "\" & k(i) & ".xls"
.Close
End With
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "完毕"
End Sub
4、保存后 (显示保存不了关系也不大)打开Excel常规页面 ,点击视图==》宏==》查看宏,自动弹出下面窗口,点击确定
5、 鼠标从按钮上面移开 ,然后点击按钮输入要列号,就是根据哪列的数据进行拆分文件,下图我们输入4就是按照班级进行拆分,根据不同的班级拆分成不同的文件
6、点击确定后,如果弹出完毕提示框代表拆分完成(数据量大就比较慢,耐心等待即可)
7、到源文件所在的目录文件中查看拆分的文件
8、将拆分的文件与第2步的基表进行连接,使用超链接函数=HYPERLINK(link_location,friendly_name),基本实现从主表找到从表的形式,目前的问题是需要进入从表后返回,以及将从表全部放在主表中,方便其他同事使用,因为已经通过第一种方法解决,这个就没有往后思考了,希望看到的朋友能给一些思路,谢谢!
注释:查询的过程中也有朋友说使用spool等脚本,不太理解