提取数据库对象的代码或脚本

时间:2012-06-08 09:55:15

标签: database plsql oracle10g toad plsqldeveloper

我需要从我的所有函数,过程,包,视图和表中提取代码(脚本),这样当我转到生产时,我可以运行脚本来创建所有对象。

开发时我没有对所有数据库对象进行脚本备份。

提取代码或脚本的最佳方法是什么?任何建议或帮助都非常值得赞赏。

由于

4 个答案:

答案 0 :(得分:6)

你确实使用版本控制系统吗?请做。

如果不能使用系统函数dbms_metadata.get_ddl,它将返回用于创建对象的DDL的clob。这需要针对每个单独的对象进行,因此可能需要循环遍历user_objects

或者,您可以通过右键单击对象并使用view选项查看PL / SQL Developer中的定义,然后在右下角可以查看用于创建对象的SQL。

还有一个export "tool",对于如何将其用作SQL Developer变体没有那么好的解释。

当然,正确的答案是获得版本控制系统并使用它。

答案 1 :(得分:1)

我不知道数据库本身,但SQL Developer会这样做。我很确定TOAD和其他类似工具也一样。

答案 2 :(得分:0)

很抱歉,您的非优化开发实践不会扩展到一个开发人员之外。

永远不要使用SQL GUI客户端'直接在数据库中编辑数据库对象的能力。 (除非你故意想制造人为问题。)

相反,所有SQL和PL / SQL DDL和DML都应位于保存到version control system(VCS)的文本文件中(例如subversiongitmercurial) 。使用favorite editor编辑文件。

使用命令行工具(在Oracle中sqlplus)执行VCS中保存的文本文件来修改数据库。这适用于所有数据库实例:开发,质量保证,生产。

对于大型开发项目,请考虑使用schema migration工具(例如FlywayRoundhouse)。

多年来,我通过执行一项简单的规则,消除了大量的开发和生产问题:

  

如果代码不在VCS中,则它不存在。

(令人惊讶的是,仍然在2015年,很多开发团队都没有使用VCS。)

答案 3 :(得分:0)

就我而言,所有自定义对象均以“ XX”开头。您可以使用或修改我的脚本:

DECLARE
   CURSOR c_tables IS
     SELECT replace(object_type, ' ', '_') type,
            object_name name,
            owner schema,
            object_type||'#'||object_name||'.sql' files
       FROM all_objects
      WHERE UPPER(object_name) LIKE 'XX%'
        AND object_type NOT IN ('DIRECTORY');

   ddl_text CLOB;

 BEGIN
   FOR rec_tables IN c_tables LOOP
     dbms_output.put_line('OBJECT_TYPE: '||rec_tables.type||', OBJECT_NAME: '||rec_tables.name||', SCHEMA: '||rec_tables.schema||' ->'||rec_tables.files);

     SELECT dbms_metadata.get_ddl(rec_tables.type, rec_tables.name, rec_tables.schema)
       INTO ddl_text
       FROM DUAL;

     dbms_xslprocessor.clob2file(ddl_text, 'UTL_CUSTOM_DDL', rec_tables.files, nls_charset_id('WE8MSWIN1252'));
   END LOOP;
 END;

致谢

相关问题