大体的分为三种方法:
一、可以通过toad、plsql develop等第三方工具进行导出DLL操作,用这种办法的好处在于操作简单方便,但需要安装,下面简单介绍一下用这两个工具获得DLL语句的操作。
二、直接通过EXP/IMP工具
Oracle提供的最原始最实用的导入导出工具,我们大体上可以分为三种办法实现导出DDL。
a. 通过imp指定indexfile参数,但这种办法不爽在于有每行前会有REM
语法大体如下:
exp userid=... tables=emp rows=n file=emp.dmp
imp userid=... file=emp.dmp indexfile=emp.sql
b. 通过imp指定show=y,同时指定log参数,格式上也不是很爽,在格式上很美观的还是通过工具导出的比较美观
语法大体如下:
exp userid=... tables=emp rows=n file= emp.dmp
imp userid=... file= emp.dmp show=y log=emp.sql
c. 利用unix下有strings命令,语法大体如下,这种方法比较野蛮:
exp userid=... tables=tab1 rows=n file=tab1.dmp
strings emp.dmp >emp.sql
emp.sql中就有DLL语句了
三、通过9i的DBMS_METADATA包得到DLL语句
基本上用到的语法如下:
a. 获取单个的建表和建索引的语法
set heading off;
set echo off;
Set pages 999;
set long 90000;
spool DEPT.sql
select dbms_metadata.get_ddl('TABLE','DEPT','SCOTT') from dual;
select dbms_metadata.get_ddl('INDEX','DEPT_IDX','SCOTT') from dual;
spool off;
b.获取一个SCHEMA下的所有建表和建索引的语法,以scott为例:
set pagesize 0
set long 90000
set feedback off
set echo off
spool scott_schema.sql
connect scott/tiger;
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u;
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) FROM USER_INDEXES u;
spool off;
c. 获取某个SCHEMA的建全部存储过程的语法
connect brucelau /brucelau;
spool procedures.sql
select DBMS_METADATA.GET_DDL('PROCEDURE',u.object_name) from user_objects u where object_type = 'PROCEDURE';
spool off;
另:dbms_metadata.get_ddl('TABLE','TAB1','USER1')
三个参数中,第一个指定导出DDL定义的对象类型(此例中为表类型),第二个是对象名(此例中即表名),第三个是对象所在的用户名。
ORACLE获取DML(Insert into)的方法
from: 把Oracle表里的数据导成insert语句
有些时候我们需要把oracle里的数据导入其他数据库里。生成insert into 表名 .... 是一种很简单直接的方法。
今年六月份从www.arikaplan.com/oracle.html看到一个可以生成insert into 表名 ....语句的存储过程genins_output。按中文习惯的时间格式YYYY-MM-DD HH24:MI:SS改了改,并新写了一个存储过程genins_file.sql。
它可以把小于16383条记录表里的数据导成(insert into 表名 ....)OS下文件。
调用它之前,DBA要看看数据库的初始化参数 UTL_FILE_DIR 是否已经正确地设置:
SQL> show parameters utl_file_dir;
可以看到该参数的当前设置。
如果没有值,必须修改数据库的initsid.ora文件,将utl_file_dir 指向一个你想用PL/SQL file I/O 的路径。重新启动数据库。此参数才生效。
调用它,可以把表里的数据生成(insert into 表名 ....)OS下文件的过程genins_file方法:
SQL>exec genins_file('emp','/oracle/logs','insert_emp.sql');
| | |
表名,可变 | 生成OS下文件名,可变
|
utl_file_dir路径名,不变(我设置的是/oracle/logs)
可以在OS目录/oracle/logs下看到insert_emp.sql文件。
注意事项: 生成(insert into 表名 ....)OS下文件最多32767行。因为我一条insert分成两行,所以最多处理16383条记录的表。
附:genins_file.sql
code:
--------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE genins_file(
p_table IN varchar2,
p_output_folder IN VARCHAR2,
p_output_file IN VARCHAR2)
IS
--
l_column_list VARCHAR2(32767);
l_value_list VARCHAR2(32767);
l_query VARCHAR2(32767);
l_cursor NUMBER;
ignore NUMBER;
l_insertline1 varchar2(32767);
l_insertline2 varchar2(32767);
cmn_file_handle UTL_FILE.file_type;
--
FUNCTION get_cols(p_table VARCHAR2)
RETURN VARCHAR2
IS
l_cols VARCHAR2(32767);
CURSOR l_col_cur(c_table VARCHAR2) IS
SELECT column_name
FROM user_tab_columns
WHERE table_name = upper(c_table)
ORDER BY column_id;
BEGIN
l_cols := null;
FOR rec IN l_col_cur(p_table)
LOOP
l_cols := l_cols || rec.column_name || ',';
END LOOP;
RETURN substr(l_cols,1,length(l_cols)-1);
END;
--
FUNCTION get_query(p_table IN VARCHAR2)
RETURN VARCHAR2
IS
l_query VARCHAR2(32767);
CURSOR l_query_cur(c_table VARCHAR2) IS
SELECT 'decode('||column_name||',null,''null'','||
decode(data_type,'VARCHAR2','''''''''||'||column_name ||'||'''''''''
,'DATE','''''''''||to_char('||column_name||',''YYYY-MM-DD HH24:MI:SS'')||'''''''''
,column_name
) || ')' column_query
FROM user_tab_columns
WHERE table_name = upper(c_table)
ORDER BY column_id;
BEGIN
l_query := 'SELECT ';
FOR rec IN l_query_cur(p_table)
LOOP
l_query := l_query || rec.column_query || '||'',''||';
END LOOP;
l_query := substr(l_query,1,length(l_query)-7);
RETURN l_query || ' FROM ' || p_table;
END;
--
BEGIN
l_column_list := get_cols(p_table);
l_query := get_query(p_table);
l_cursor := dbms_sql.open_cursor;
DBMS_SQL.PARSE(l_cursor, l_query, DBMS_SQL.native);
DBMS_SQL.DEFINE_COLUMN(l_cursor, 1, l_value_list, 32767);
ignore := DBMS_SQL.EXECUTE(l_cursor);
--
IF NOT UTL_FILE.IS_OPEN(cmn_file_handle) THEN
cmn_file_handle := UTL_FILE.FOPEN (p_output_folder, p_output_file, 'a',32767);
END IF;
LOOP
IF DBMS_SQL.FETCH_ROWS(l_cursor)>0 THEN
DBMS_SQL.COLUMN_VALUE(l_cursor, 1, l_value_list);
l_insertline1:='INSERT INTO '||p_table||' ('||l_column_list||')';
l_insertline2:=' VALUES ('||l_value_list||');';
UTL_FILE.put_line (cmn_file_handle, l_insertline1);
UTL_FILE.put_line (cmn_file_handle, l_insertline2);
ELSE
EXIT;
END IF;
END LOOP;
IF NOT UTL_FILE.IS_OPEN(cmn_file_handle) THEN
UTL_FILE.FCLOSE (cmn_file_handle);
END IF;
END;
/
分享到:
相关推荐
从 Oracle 数据库中导出 SQL 脚本 Oracle 数据库是一个功能强大且复杂的关系数据库管理系统,提供了多种方式来导出数据库对象的创建和申明的 SQL 脚本。下面将详细介绍如何从 Oracle 数据库中导出 SQL 脚本。 获取...
/*oracle jobs 导出为执行脚本 <br> 就是把all_jobs或dba_jobs,导成DBMS_JOB.SUBMIT可以插入job的格式 其中all_jobs是当前用户的job,dba_jobs则是全部 下面只是随便整理了下,可以按照个人需要修改 ...
oracle数据库的导出,然后建用户说明,以及导出SQL脚本
描述中提到,“只要有一个表清单,就可以导出所有建表脚本”,这通常可以通过SQL Developer、PL/SQL Developer等Oracle数据库管理工具实现,也可以通过命令行工具如SQL*Plus来完成。 在给定的文件中,"table.list...
2、能够批量导出sql库中需要的一些小表数据。 4、自动解析oracle连接配置,支持不安装sqlplus备份oracle中某个用户的所有对象脚本,方便备份。 5.能够批量导出oracle用户下的重要的小表数据。 6.如果有用户下载此...
"数据库工具(导出SQL脚本)"这一主题主要关注如何利用这些工具将数据库中的数据和结构转换为可执行的SQL脚本,以便于数据的迁移、备份或共享。以下是关于这个主题的详细解释: 一、SQL脚本的重要性 SQL...
本文将详细介绍如何使用Oracle工具和脚本将数据导出为不同的文件格式,如CSV、DBF,并探讨FTP自动下载脚本的实现。 首先,让我们关注Oracle数据库到CSV的导出。CSV(Comma Separated Values)是一种通用的文件格式...
PowerDesigner 是一个功能强大的数据库设计工具,除了能够帮助用户设计和管理数据库外,还提供了强大的反向工程功能,能够将数据库设计导出为 SQL 脚本、HTML 或 Word 文档等多种格式,从而满足不同的需求和应用场景...
《Oracle实例SQL脚本大全》是一份集合了广泛Oracle数据库操作和管理的SQL脚本资源。这份资料旨在帮助IT专业人士,尤其是数据库管理员(DBA)和开发者更好地理解和掌握Oracle SQL的用法,提升他们在实际工作中的效率。...
根据给定的文件信息,我们可以深入探讨Oracle逻辑导出脚本的关键知识点,这些知识点主要集中在Oracle数据库的逻辑备份过程、Shell脚本编程以及系统管理方面。 ### Oracle逻辑导出脚本概览 #### 标题解析:Oracle...
"Oracle常用SQL脚本"集合通常包含了一系列预编写好的SQL语句或存储过程,以帮助数据库管理员和开发人员高效地完成日常任务。这些脚本可能涉及数据库性能监控、数据备份与恢复、用户权限管理、表结构操作等多个方面。...
Oracle 导出 txt 文件方法 Oracle 导出 txt 文件方法是指使用 spool 命令将 Oracle 数据库中的数据导出到 txt 文件中。这种方法可以自定义导出格式,以便于程序直接导入。 首先,我们需要了解 Oracle 文本导出的...
大家都知道,从oracle数据库中导出数据时,如果其中有字段类型为date,那么导出时将会变成to_date('29-...本程序实现了将oracle数据导出文件中的to_date('x','y')转换成'x'的功能,并去掉了一些非SQL语句,如prompt...
`DBMS_METADATA`包主要用于获取数据库对象的定义,并可以将这些定义转换成SQL脚本的形式。脚本中包含了多个`EXEC DBMS_METADATA.set_transform_param`命令,用于设置输出的格式和细节,例如: - `EXEC DBMS_...
在Oracle数据库环境下,为了便于测试、迁移或系统升级,经常需要将数据库中的重要数据导出为SQL脚本。这使得我们可以保存和重新插入数据,同时保持数据结构的一致性。本文将详细讲解如何在Oracle环境中导出数据为SQL...
总之,解决Oracle导出CSV文件显示乱码的关键在于理解字符编码和数据解析的过程。通过正确设置文件的编码和应用正确的分隔符,可以确保数据在不同程序间顺利转换并保持可读性。如果上述方法无效,可能需要检查数据库...
6. **输出格式**:提供不同的输出格式,如文本文件、SQL脚本等,方便后续操作。 在使用这个工具时,用户需要注意以下几点: 1. **权限检查**:确保拥有足够的数据库权限执行SELECT和DML操作。 2. **数据安全**:在...
《通用SQL数据脚本导出工具详解》 在IT领域,数据管理是至关重要的环节,尤其是在涉及数据库迁移、备份或复制场景时。SQL(Structured Query Language)作为数据库操作的主要语言,其数据导入导出功能是数据库管理...
总的来说,Oracle导出xls文件数据的脚本涉及了Oracle的SQL*Plus、外部表、批处理脚本等多个技术点。通过这些技术,我们可以灵活地从Oracle数据库导出数据到Excel,满足各种业务需求。在实际操作中,应根据具体环境和...
### Oracle导出脚本文件的方法 #### 概述 在Oracle数据库管理中,为了便于数据迁移、备份或恢复等操作,导出脚本文件成为一项非常实用的功能。本文将详细介绍如何使用Oracle的导出工具(`exp`)来创建`.dmp`文件,...