oracle 备份package,Groovy高效编程——导出Oracle的package源码

importjava.sql.*;importgroovy.sql.*;importoracle.jdbc.driver.OracleTypes;

Properties properties=newProperties();

properties.load(newFileInputStream("conf.properties"));

def url=properties.getProperty('url')

def schema=properties.getProperty('schema')

def destination=properties.getProperty('destination')

def destinationLocation=newFile(destination)if(!destinationLocation.exists()) {

destinationLocation.mkdirs()

}

Sql sql=Sql.newInstance(url,'oracle.jdbc.driver.OracleDriver');

def names=[]

sql.call("""declare

rows SYS_REFCURSOR;

begin

open rowsforSELECT DISTINCT NAME

FROM all_source

WHERE TYPE IN ('PACKAGE','PACKAGE BODY') AND owner='${schema}'ORDER BY NAME;

${Sql.resultSet OracleTypes.CURSOR} :=rows;

end;"""){ rows->rows.eachRow { row->names<

}

}

def export={ schm, type, name->StringBuffer content=newStringBuffer()

sql.call("""declare

lines SYS_REFCURSOR;

begin

open linesforSELECT text

FROM all_source

WHERE TYPE='${type}'AND owner='${schm}'AND name='${name}'ORDER BY TYPE, NAME, line;

${Sql.resultSet OracleTypes.CURSOR} :=lines;

end;"""){ lines->lines.eachRow { line->content<

}

}returncontent.toString().replaceFirst(/(?i)\bpackage\b/,'CREATE OR REPLACE PACKAGE')

}

names.each { name->def packageSpecificationStr=export(schema,'PACKAGE', name)

def packageBodyStr=export(schema,'PACKAGE BODY', name)newFile(destination+File.separator+name+'.pks').text=(packageSpecificationStr+'\n\n\n'+packageBodyStr).replaceAll(/(?

println"############ ${names.size()} package(s) exported #############"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值