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;
分享到:
相关推荐
10. **数据导入导出**:通过PL/SQL Developer,你可以方便地将数据从本地导入到远程数据库,或从远程数据库导出到本地,这对于数据迁移和备份恢复操作很有帮助。 总的来说,PL/SQL Developer提供了强大的远程连接...
PL/SQL是Oracle数据库的一种过程化语言,结合了SQL的查询能力与高级编程语言的控制结构,使得数据库管理和应用程序开发更为便捷高效。 在PL/SQL工具中,你可以执行以下主要任务: 1. **数据查询**:使用内置的查询...
PL/SQL Developer是一款非常实用且功能强大的Oracle数据库开发工具,它提供了多种方式来导出数据库中的数据和对象。 ##### 1. 以“Normal”模式登录数据库 首先,打开PL/SQL Developer并连接到Oracle数据库。选择...
6.导出数据库表结构文档 7.快速打开TNSNAME.ORA文件 8.快速打开listener.ORA文件 9.快速打开Oracle Net Manager 10.自定义配置 10.1.语言配置,支持中英两种语言 10.2.菜单自定义配置 10.3.数据库监视SQL自定义...
9. **导入导出功能**:可以将数据库对象或整个数据库结构导出为SQL脚本,或从SQL脚本导入新对象,方便迁移和备份。 10. **帮助文档**:附带的使用说明(如"使用说明.txt"文件)通常会详细介绍软件的安装步骤、基本...
PL/SQL Developer是一款专为PL/SQL编程和Oracle数据库管理设计的强大开发工具。这款软件提供了全面的功能,使得数据库开发者和管理员能够高效地进行各种数据库操作,包括编写、调试、执行和管理PL/SQL代码,以及...
PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...
标题“PL/SQL 本机无需Oracle数据库运行文件”意味着你可以通过一个轻量级的客户端工具来执行PL/SQL代码,并与远程Oracle数据库进行交互。这个客户端工具通常指的是PL/SQL Developer或SQL Developer等应用程序,它们...
"exp.exe"就是Oracle提供的一种用于导出数据库的命令行工具,它是Oracle Data Pump工具的一部分,名为Export。 Oracle Data Pump(也称为 EXPDP 和 IMPDP)是Oracle 10g及更高版本引入的高级数据传输机制,它比传统...
通过这个工具,你可以轻松地查看、编辑和执行SQL查询,管理表、视图、存储过程、触发器等数据库对象,同时还能进行数据导入导出和数据库备份恢复操作。 1. **PL/SQL编程支持**:PL/SQL Developer内置了强大的PL/SQL...
PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种内置编程语言,它是SQL(结构化查询语言)的扩展,增加了程序设计的元素,使得在处理数据库时可以进行更复杂的逻辑控制。PL/SQL将...
PL/SQL Developer是Oracle数据库当前最流行的开发工具之一,它在ORACLE数据库开发设计方面功能强大,使用方便,但是数据库管理方面一直比较欠缺。 DBATools For PL/SQL Developer 是一款PL/SQL Developer的辅助插件...
2. 集成开发环境(IDE):PL/SQL Developer提供了全面的开发工具集,包括源代码编辑器、调试器、数据库连接管理、对象浏览器、数据查看器等,使开发者能高效地进行数据库应用开发。 3. 源代码编辑器:它提供语法...
PL/SQL是Oracle数据库系统中的编程语言,全称为Procedural Language/Structured Query Language,它结合了SQL(结构化查询语言)的查询功能和过程性编程语言的特点,为数据库管理员和开发人员提供了一种强大而灵活的...
PL/SQL Developer是一款由Allround Automations公司开发的集成开发环境(IDE),专门用于编写、测试和管理Oracle数据库的PL/SQL代码。本教程将深入介绍如何充分利用这款强大的工具,帮助初学者快速上手。 一、PL/...
这款工具支持PL/SQL语言,是Oracle数据库应用程序开发的重要辅助工具。 1. **界面与环境** PL/SQL Developer具有用户友好的界面,分为多个窗口,如对象浏览器、编辑器、调试器和结果集窗口,便于开发者浏览数据库...
PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库管理工具,专为数据库开发者设计,旨在提升数据库管理和开发的效率。它集成了多种实用功能,包括编写、调试、测试和部署PL/SQL代码,以及...
4. **数据浏览与操作**:可以直接在工具中查询和操作数据库中的数据,提供数据导入导出功能,支持SQL脚本的执行。 5. **项目管理**:可以组织和管理多个数据库项目,便于团队协作和代码版本控制。 6. **报表生成**...
4. **数据浏览**:提供数据网格视图,可以查看、编辑和导出数据库表中的数据。 5. **对象管理**:可以创建、修改和删除各种数据库对象,如表、索引、视图、序列等。 6. **脚本执行**:支持批处理脚本执行,方便进行...
在PL/SQL 8版本中,用户可以使用这些工具进行数据查询、数据库对象管理、数据导入导出等操作。客户端还包含网络组件,如Net8配置助手,用于设置与远程数据库的连接。 "注册码"标签可能指的是为了激活或授权Oracle...