`
wuhuizhong
  • 浏览: 681287 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

PL/SQL工具导出整个数据库的表的结构

阅读更多
create or replace package reverse_engineer as

  procedure single_file(schema_name in varchar2);
  procedure multi_file(schema_name in varchar2);

  --產出CREATE  TABLE的語法,並將相關建立Trigger、Index、Grant權限的語法產出。 
  PROCEDURE PRO_GENERATE_TABLE(P_OWNER VARCHAR2, P_TABLE VARCHAR2);

end reverse_engineer;

create or replace package body reverse_engineer as

  procedure single_file(schema_name in varchar2) as
    cursor object(schema_db varchar2) is
      select object_name, object_type
        from all_objects
       where owner = schema_db
         and object_type in ('TABLE', 'VIEW', 'SYNONYM', 'PACKAGE',
              'PROCEDURE', 'INDEX', 'TYPE', 'TRIGGER')
       order by object_type;
  
    rec_obj       object%rowtype;
    ddl_statement clob;
    fileHandler   UTL_FILE.FILE_TYPE;
  begin
    fileHandler := UTL_FILE.FOPEN('TEST_DIR',
                                  'r_e_' || upper(schema_name) || '.sql',
                                  'a');
    for rec_obj in object(upper(schema_name)) loop
      begin
        ddl_statement := dbms_metadata.get_ddl(rec_obj.object_type,
                                               rec_obj.object_name,
                                               schema_name);
        ddl_statement := ddl_statement || '/';
        UTL_FILE.PUT_LINE(fileHandler, ddl_statement);
      exception
        when others then
          fileHandler := UTL_FILE.FOPEN('TEST_DIR', 'r_e_error.log', 'a');
          UTL_FILE.PUT_LINE(fileHandler, sqlcode);
          UTL_FILE.PUT_LINE(fileHandler, sqlerrm);
          UTL_FILE.FCLOSE(fileHandler);
      end;
    end loop;
    UTL_FILE.FCLOSE(fileHandler);
  exception
    WHEN utl_file.invalid_path THEN
      raise_application_error(-20000,
                              'ERROR:   Invalid   path   for   file   or   path   not   in   INIT.ORA   or   SPFILE.ORA');
    WHEN utl_file.invalid_mode THEN
      raise_application_error(-20001,
                              'ERROR:   Invalid   mode   for   open   file');
    WHEN utl_file.invalid_operation THEN
      raise_application_error(-20002,
                              'ERROR:   Invalid   operation   for   file');
    
    WHEN others then
      UTL_FILE.FCLOSE(fileHandler);
      dbms_output.put_line('Error   code:   ' || sqlcode);
      dbms_output.put_line('Error   description:   ' || sqlerrm);
  end single_file;

  procedure multi_file(schema_name in varchar2) as
    cursor object(schema_db varchar2) is
      select object_name, object_type
        from all_objects
       where owner = schema_db
         and object_type in ('TABLE', 'VIEW', 'SYNONYM', 'PACKAGE',
              'PROCEDURE', 'INDEX', 'TYPE', 'TRIGGER')
       order by object_type;
  
    rec_obj       object%rowtype;
    ddl_statement clob;
    fileHandler   UTL_FILE.FILE_TYPE;
  begin
    for rec_obj in object(upper(schema_name)) loop
      fileHandler := UTL_FILE.FOPEN('TEST_DIR',
                                    'r_e_' || upper(schema_name) || '.' ||
                                    rec_obj.object_name || '.sql',
                                    'a');
      begin
        ddl_statement := dbms_metadata.get_ddl(rec_obj.object_type,
                                               rec_obj.object_name,
                                               schema_name);
        ddl_statement := ddl_statement || '/';
        UTL_FILE.PUT_LINE(fileHandler, ddl_statement);
        UTL_FILE.FCLOSE(fileHandler);
      exception
        when others then
          fileHandler := UTL_FILE.FOPEN('TEST_DIR', 'r_e_error.log', 'a');
          UTL_FILE.PUT_LINE(fileHandler, sqlcode);
          UTL_FILE.PUT_LINE(fileHandler, sqlerrm);
          UTL_FILE.FCLOSE(fileHandler);
      end;
    end loop;
  exception
    WHEN utl_file.invalid_path THEN
      raise_application_error(-20000,
                              'ERROR:   Invalid   path   for   file   or   path   not   in   INIT.ORA   or   SPFILE.ORA');
    WHEN utl_file.invalid_mode THEN
      raise_application_error(-20001,
                              'ERROR:   Invalid   mode   for   open   file');
    WHEN utl_file.invalid_operation THEN
      raise_application_error(-20002,
                              'ERROR:   Invalid   operation   for   file');
    WHEN others then
      UTL_FILE.FCLOSE(fileHandler);
      dbms_output.put_line('Error   code:   ' || sqlcode);
      dbms_output.put_line('Error   description:   ' || sqlerrm);
  end multi_file;

  PROCEDURE PRO_GENERATE_TABLE(P_OWNER VARCHAR2, P_TABLE VARCHAR2) IS
    V_DDL       clob;
    fileHandler UTL_FILE.FILE_TYPE;
  BEGIN
    fileHandler := UTL_FILE.FOPEN('TEST_DIR',
                                  'CRE_' || upper(P_OWNER) || '_' ||
                                  upper(P_TABLE) || '.sql',
                                  'a');
    begin
      V_DDL := dbms_metadata.get_ddl('TABLE', P_TABLE, P_OWNER);
      V_DDL := V_DDL || '/';
      UTL_FILE.PUT_LINE(fileHandler, V_DDL);
    exception
      when others then
        fileHandler := UTL_FILE.FOPEN('TEST_DIR', 'cre_error.log', 'a');
        UTL_FILE.PUT_LINE(fileHandler, sqlcode);
        UTL_FILE.PUT_LINE(fileHandler, sqlerrm);
        UTL_FILE.FCLOSE(fileHandler);
    end;
    UTL_FILE.FCLOSE(fileHandler);
  exception
    WHEN utl_file.invalid_path THEN
      raise_application_error(-20000,
                              'ERROR:   Invalid   path   for   file   or   path   not   in   INIT.ORA   or   SPFILE.ORA');
    WHEN utl_file.invalid_mode THEN
      raise_application_error(-20001,
                              'ERROR:   Invalid   mode   for   open   file');
    WHEN utl_file.invalid_operation THEN
      raise_application_error(-20002,
                              'ERROR:   Invalid   operation   for   file');
    
    WHEN others then
      UTL_FILE.FCLOSE(fileHandler);
      dbms_output.put_line('Error   code:   ' || sqlcode);
      dbms_output.put_line('Error   description:   ' || sqlerrm);
  END PRO_GENERATE_TABLE;

end reverse_engineer;
 
分享到:
评论

相关推荐

    PL/SQL Developer 远程连接Oracle数据库

    10. **数据导入导出**:通过PL/SQL Developer,你可以方便地将数据从本地导入到远程数据库,或从远程数据库导出到本地,这对于数据迁移和备份恢复操作很有帮助。 总的来说,PL/SQL Developer提供了强大的远程连接...

    PL/SQL工具

    PL/SQL是Oracle数据库的一种过程化语言,结合了SQL的查询能力与高级编程语言的控制结构,使得数据库管理和应用程序开发更为便捷高效。 在PL/SQL工具中,你可以执行以下主要任务: 1. **数据查询**:使用内置的查询...

    利用PL/SQL工具导出、导入数据库、视图、解发器等

    PL/SQL Developer是一款非常实用且功能强大的Oracle数据库开发工具,它提供了多种方式来导出数据库中的数据和对象。 ##### 1. 以“Normal”模式登录数据库 首先,打开PL/SQL Developer并连接到Oracle数据库。选择...

    DBAtools for PL/SQL表空间管理器

    6.导出数据库表结构文档 7.快速打开TNSNAME.ORA文件 8.快速打开listener.ORA文件 9.快速打开Oracle Net Manager 10.自定义配置 10.1.语言配置,支持中英两种语言 10.2.菜单自定义配置 10.3.数据库监视SQL自定义...

    pl/sql developer11.0

    9. **导入导出功能**:可以将数据库对象或整个数据库结构导出为SQL脚本,或从SQL脚本导入新对象,方便迁移和备份。 10. **帮助文档**:附带的使用说明(如"使用说明.txt"文件)通常会详细介绍软件的安装步骤、基本...

    pl/sql开发工具

    PL/SQL Developer是一款专为PL/SQL编程和Oracle数据库管理设计的强大开发工具。这款软件提供了全面的功能,使得数据库开发者和管理员能够高效地进行各种数据库操作,包括编写、调试、执行和管理PL/SQL代码,以及...

    pl/sql64位

    PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...

    pl/sql 本机无需oracle数据库运行文件

    标题“PL/SQL 本机无需Oracle数据库运行文件”意味着你可以通过一个轻量级的客户端工具来执行PL/SQL代码,并与远程Oracle数据库进行交互。这个客户端工具通常指的是PL/SQL Developer或SQL Developer等应用程序,它们...

    pl/sql 导出Oracle数据库必须的工具

    "exp.exe"就是Oracle提供的一种用于导出数据库的命令行工具,它是Oracle Data Pump工具的一部分,名为Export。 Oracle Data Pump(也称为 EXPDP 和 IMPDP)是Oracle 10g及更高版本引入的高级数据传输机制,它比传统...

    pl/sql 免安装,绿色版pl/sql

    通过这个工具,你可以轻松地查看、编辑和执行SQL查询,管理表、视图、存储过程、触发器等数据库对象,同时还能进行数据导入导出和数据库备份恢复操作。 1. **PL/SQL编程支持**:PL/SQL Developer内置了强大的PL/SQL...

    非常好用的PL/SQL

    PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种内置编程语言,它是SQL(结构化查询语言)的扩展,增加了程序设计的元素,使得在处理数据库时可以进行更复杂的逻辑控制。PL/SQL将...

    DBATools for PL/SQL Developer结构导出WORD

    PL/SQL Developer是Oracle数据库当前最流行的开发工具之一,它在ORACLE数据库开发设计方面功能强大,使用方便,但是数据库管理方面一直比较欠缺。 DBATools For PL/SQL Developer 是一款PL/SQL Developer的辅助插件...

    pl/sql developer 用户指南中文版

    2. 集成开发环境(IDE):PL/SQL Developer提供了全面的开发工具集,包括源代码编辑器、调试器、数据库连接管理、对象浏览器、数据查看器等,使开发者能高效地进行数据库应用开发。 3. 源代码编辑器:它提供语法...

    PL/SQL汉化版

    PL/SQL是Oracle数据库系统中的编程语言,全称为Procedural Language/Structured Query Language,它结合了SQL(结构化查询语言)的查询功能和过程性编程语言的特点,为数据库管理员和开发人员提供了一种强大而灵活的...

    pl/sql developer使用教程

    PL/SQL Developer是一款由Allround Automations公司开发的集成开发环境(IDE),专门用于编写、测试和管理Oracle数据库的PL/SQL代码。本教程将深入介绍如何充分利用这款强大的工具,帮助初学者快速上手。 一、PL/...

    pl/sql developer 中文指南

    这款工具支持PL/SQL语言,是Oracle数据库应用程序开发的重要辅助工具。 1. **界面与环境** PL/SQL Developer具有用户友好的界面,分为多个窗口,如对象浏览器、编辑器、调试器和结果集窗口,便于开发者浏览数据库...

    pl/sql developer

    PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库管理工具,专为数据库开发者设计,旨在提升数据库管理和开发的效率。它集成了多种实用功能,包括编写、调试、测试和部署PL/SQL代码,以及...

    pl/sql 12 完全汉化版

    4. **数据浏览与操作**:可以直接在工具中查询和操作数据库中的数据,提供数据导入导出功能,支持SQL脚本的执行。 5. **项目管理**:可以组织和管理多个数据库项目,便于团队协作和代码版本控制。 6. **报表生成**...

    PL/SQLdeveloper32位和64位带汉化及注册码

    4. **数据浏览**:提供数据网格视图,可以查看、编辑和导出数据库表中的数据。 5. **对象管理**:可以创建、修改和删除各种数据库对象,如表、索引、视图、序列等。 6. **脚本执行**:支持批处理脚本执行,方便进行...

    pl/sql 8 Oracle客户端

    在PL/SQL 8版本中,用户可以使用这些工具进行数据查询、数据库对象管理、数据导入导出等操作。客户端还包含网络组件,如Net8配置助手,用于设置与远程数据库的连接。 "注册码"标签可能指的是为了激活或授权Oracle...

Global site tag (gtag.js) - Google Analytics