如何批量从库中导出DDL语句
来源:互联网 发布:unity3d 就业 编辑:程序博客网 时间:2024/05/18 00:22
在平时开发过程中,需要先在开发环境中开发,开发完并测试无误后导出ddl语句投放到生产环境。如果开发变动涉及到的object比较多,如何快速而又准确地导出是一个值得我们探讨的问题。通常我们会选择在PL/SQL developer中附带的export user objects工具中选择导出,但是这样做缺点也是很明显的,纵然我们按照complied时间降序排列,但是有些最近编译的却并非需要导出,仍然需要人为的去选择确认需要导出的对象。因此本人就最近研究出的方法,整理成blog供大家一起探讨。
本人想到的方法是将需要导出的对象名称整理合并到一个list文件中,在windows环境中依次读取作为入参循环执行sqlplus命令,sqlplus命令中利用spool方法将将要导出对象的ddl语句导出成单个文件,最后将导出的单个文件合并成一个sql文件,最终的sql文件即可投放到生产环境中。
具体步骤如下:
1.导出对象list:
将导出对象list作为一个配置文件function_list.ini
FN_TCK_CLIENT_INFO_QRYp_tck_scope_data_sync
2.windows下总控脚本export.bat
@echo offecho null > export.logfor /f %%i in (function_list.ini) do (sqlplus user_name/password@orcl @export_function.sql %%i >> export.log)::追加 / for %%i in (*.csv) do echo / >> %%i ::合并文件move function.sql dtl_filemove procedure.sql dtl_filecopy /b fn*.csv function.sqlcopy /b p*.csv procedure.sqlmove *.csv dtl_file
set echo offset feedback offset heading offset verify offset newpage noneset linesize 32767set pagesize 0set term offset trims offset trimspool onset trimout onset timing offset long 90000 spool &1..csv select DBMS_METADATA.GET_DDL(CASE WHEN upper('&1') like 'FN%' THEN 'FUNCTION' WHEN upper('&1') like 'P%' THEN 'PROCEDURE' END, upper('&1')) from dual;spool off; exit
这样就可以实现基本功能了,但是本人却发现有一些问题:在导出的ddl语句中在某些行会自动换行,如下图
在网上也找了很多相关资料,却都并没有很好的解决办法。因此想着换一种方式导出。新的导出脚本export_function.sql如下:
set echo offset feedback offset heading offset verify offset newpage noneset linesize 32767set pagesize 0set term offset trims offset trimspool onset trimout onset timing offset long 90000 spool &1..csv select case when line = 1 then (case when type = 'FUNCTION' then 'CREATE OR REPLACE ' || regexp_replace(replace(lower(TEXT), '"', ''), 'f', 'rome.f', 1, 2) when type = 'PROCEDURE' then 'CREATE OR REPLACE ' || regexp_replace(replace(lower(TEXT), '"', ''), 'p', 'rome.p', 1, 2) else '' END) else TEXT end From user_source where type = CASE WHEN upper('&1') like 'FN%' THEN 'FUNCTION' WHEN upper('&1') like 'P%' THEN 'PROCEDURE' END and NAME = upper('&1') order by line;/*--导出字段有自动换行select DBMS_METADATA.GET_DDL(CASE WHEN upper('&1') like 'FN%' THEN 'FUNCTION' WHEN upper('&1') like 'P%' THEN 'PROCEDURE' END, upper('&1')) from dual;*/ --select DBMS_METADATA.GET_DDL('FUNCTION', upper('FN_TICKETS_LOCK_ORDER_V1')) from dual;spool off; exit
至此基本可以规避自动换行的问题。至于为何自动换行,我用pl/sql中附带的cmd窗口(远程数据库是10g)中执行导出语句发现不换行,用本地客户端的sqlplus执行发现换行,问题初步定为在这,待后续验证。
阅读全文
1 0
- 如何批量从库中导出DDL语句
- 从Dump中获取DDL语句
- 如何在oracle中使用DDL语句!
- 从mysql 中批量导出数据
- Oracle中DDL语句
- PL/SQL块中如何调用DDL语句
- 从PL/SQL中导出insert语句
- 如何利用SQL查询语句从SQLSERVER数据库中导入导出EXCEL表格
- 如何利用SQL查询语句从SQLSERVER数据库中导入导出EXCEL表格
- 如何利用SQL查询语句从SQLSERVER数据库中导入导出EXCEL表格
- 从plsql导出ddl到PowerDesigner
- 从hdfs批量导出数据到hbase表中
- 批量导出多个表insert 语句
- 从txt文件中获取字段批量生成sql语句
- 如何从dll中导出C++类
- 如何从Eclipse中导出数据库文件.db
- 如何从redis中导出数据
- 如何从mySQL 中导出数据库?
- Android DataBinding && MVVM [U04]
- Java实现神经网络方法
- 33333333333
- spring 中的 RowMapper 类
- 守护进程
- 如何批量从库中导出DDL语句
- RecyclerView上拉刷新下拉加载
- recovery 差分升级包制作超时
- 队列->离散事件模拟-银行管理
- Android JSON原生解析的几种思路和GSON的使用方法
- Maven build jar 导出指定资源和排除指定资源配置
- 算法之阶乘
- runtime
- 部署maven项目出现错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener