美文网首页我爱编程
oracle使用dbms_metadata.get_ddl查看各

oracle使用dbms_metadata.get_ddl查看各

作者: else05 | 来源:发表于2016-10-31 10:37 被阅读763次
    • 其实就是使用dbms_metadata.get_ddl实现,在看这个文章之前,请先把末尾那两个引用的文章看完
    • 有时会查看或者是导出表、存储过程的ddl语句,如果知道了方法,以后就不用每次都去网上搜索
    以下操作使用pl/sql

    • 可以查询的类型有6种(我知道的,可能有未知领域) ,用如下语句:
    -- 6种:SEQUENCE、TRIGGER、TABLE、INDEX、VIEW、FUNCTION
    select object_type from user_objects group by object_type
    
    Paste_Image.png
    • 比如查询SEQUENCE的ddl ,如下:
    SELECT sequence_name,DBMS_METADATA.GET_DDL('SEQUENCE',sequence_name) 
    FROM user_sequences;
    
    Paste_Image.png Paste_Image.png
    • 解析
    • SELECT sequence_name,DBMS_METADATA.GET_DDL('SEQUENCE',sequence_name) FROM user_sequences;
    Paste_Image.png
    • 例子:
    -- 查询SEQUENCE
    SELECT sequence_name,DBMS_METADATA.GET_DDL('SEQUENCE',sequence_name) FROM user_sequences;
    -- 查询TABLE
    SELECT table_name,DBMS_METADATA.GET_DDL('TABLE',table_name) FROM user_tables;
    -- 查询TRIGGER
    SELECT trigger_name,DBMS_METADATA.GET_DDL('TRIGGER',trigger_name) FROM user_triggers;
    -- 查询VIEW
    SELECT view_name,DBMS_METADATA.GET_DDL('VIEW',view_name) FROM user_views;
    -- 得到一个用户下的所有表,索引,存储过程,函数的ddl
    SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)FROM USER_OBJECTS uwhere U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE','FUNCTION');
    -- 查看当前用户表的SQL
    select dbms_metadata.get_ddl('TABLE','EMPLOYEES') from dual;
    -- 查看其他用表或索引的SQL
    SELECT DBMS_METADATA.GET_DDL('TABLE','DEPT','SCOTT') FROM DUAL;
    -- 查看所需表的索引
    select INDEX_NAME, INDEX_TYPE, TABLE_NAME from user_indexes WHERE table_name='EMP';
    --查看当前用户索引的SQL
    select dbms_metadata.get_ddl('INDEX','PK_DEPT') from dual;
    -- 查看其他用户索引的SQL 
    select dbms_metadata.get_ddl('INDEX','PK_DEPT','SCOTT') from dual;
    -- 查看所需表的约束
    select owner, table_name, constraint_name, constraint_type from user_constraints where table_name='EMP';
    -- 查看创建主键的SQL
    SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','EMP_PK') FROM DUAL;
    -- 查看创建外键的SQL
    SELECT DBMS_METADATA.GET_DDL('REF_CONSTRAINT','EMP_FK_DEPT') FROM DUAL;
    -- 查看当前用户视图的SQL
    SELECT dbms_metadata.get_ddl('VIEW', 'MY_TABLES') from dual ;
    -- 查看其他用户视图的SQL
    SELECT dbms_metadata.get_ddl('VIEW', 'MY_TABLES','SCOTT') FROM DUAL;
    -- 查看创建视图的SQL也可以
    select text from user_views where view_name=upper('&view_name');
    --得到所有表空间的ddl语句
    SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)FROM DBA_TABLESPACES TS;
    --得到所有创建用户的ddl
    SELECT DBMS_METADATA.GET_DDL('USER',U.username)FROM DBA_USERS U;
    --去除storage等多余参数
    EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false); 
    
    小记:
    • 仔细观察会发现很简单,都不用去死记每个类型的查询语句,记住一个就ok了
    参考

    相关文章

      网友评论

        本文标题:oracle使用dbms_metadata.get_ddl查看各

        本文链接:https://www.haomeiwen.com/subject/kftputtx.html