plsql导出数据字典

方法一: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等脚本,不太理解

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值