在 sqlplus 中转储函数或过程的主体

Posted

技术标签:

【中文标题】在 sqlplus 中转储函数或过程的主体【英文标题】:Dump the body of a function or procedure in sqlplus 【发布时间】:2009-12-11 21:50:05 【问题描述】:

使用sqlplus连接oracle数据库时,如何导出函数或过程的主体?

【问题讨论】:

【参考方案1】:
select
    text
from
    user_source
where
    type = 'PROCEDURE'
and
    name='YOURPROCEDURENAME'
order by
    line;

【讨论】:

同样 type='FUNCTION' 和 name='YOURFUNCTIONNAME'。 我们设置了几种不同的模式。我需要做一些特别的事情来处理这些吗? 您可以登录到特定架构,user_source 将只包含该架构的源。或者您可以作为 DBA 登录,并且 dba_source 表也将有一个所有者列,您可以将其包含在 where 子句中以指定您感兴趣的架构。 实际上,您想要“选择文本”。 LINE 列有行号。【参考方案2】:

用途:

SELECT us.name,
       us.type,
       us.text
  FROM USER_SOURCE us
 WHERE us.type IN ('PROCEDURE', 'FUNCTION')
ORDER BY name, line

【讨论】:

【参考方案3】:

另一种解决方案是使用 dbms_metadata api

set line 200
set long 10000
select dbms_metadata.ddl('PACKAGE','Package Name') from dual;

您可以将其用于所有元数据,包括表、索引和约束

【讨论】:

赞成,因为我认为其他机制也需要那些“设置线/设置长”。 @monojohnny, set long 不需要其他机制。仍然 +1,因为 dbms_metadata 要走的路,恕我直言。

以上是关于在 sqlplus 中转储函数或过程的主体的主要内容,如果未能解决你的问题,请参考以下文章

设置sqlplus的autotrace 执行计划

在 Oracle SQL 开发人员中看不到过程/函数主体

linux下oracle启动关闭

PHP 在脚本中列出所有包/过程/功能及其内容主体

无法在 PHP 页面创建的 shell 脚本中执行 sqlplus 命令

无效的挂钩调用。是不是可以在函数组件的主体之外调用钩子或异步函数?