[转帖]从Oracle中导出SQL语句_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4050 | 回复: 0   主题: [转帖]从Oracle中导出SQL语句        下一篇 
dwx8023
注册用户
等级:上尉
经验:612
发帖:114
精华:0
注册:2011-11-8
状态:离线
发送短消息息给dwx8023 加好友    发送短消息息给dwx8023 发消息
发表于: IP:您无权察看 2011-11-14 16:39:34 | [全部帖] [楼主帖] 楼主

大体的分为三种方法:

一、可以通过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条记录的表。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论