首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle: procedures+functions代码库不是重叠的包体代码库

Oracle: procedures+functions代码库不是重叠的包体代码库
EN

Database Administration用户
提问于 2019-04-08 16:02:46
回答 1查看 78关注 0票数 1

我打算在数据库中找到包含一些字符串的所有代码。我运行一个查询,如:

代码语言:javascript
复制
SELECT DISTINCT name, type FROM all_source WHERE UPPER(text) LIKE UPPER(‘%string%’);

很多结果,比如100个结果,在类型列中包含了“PACKAGE”。由于包主体太大,我只想获得包含该文本的过程/函数的名称。

因此,我添加以下子句

代码语言:javascript
复制
AND TYPE IN ('PROCEDURE', 'FUNCTION')

现在我只得到了几个结果,比如说10个结果,我很困惑。

既然包体只能包含函数和过程(除了包常量外),如果100个包包含文本'abc',那么只有10个过程可以包含相同的文本吗?文本'abc‘使用一个包只能适合于一个过程或一个函数,所以如果有100个出现的使用包,必须至少有100个发生在功能/过程中。

我需要对这种现象做一些解释,更重要的是,我想知道如何缩小文本搜索范围,以获得包含过程/函数的名称,而不是父包?

(有同事建议,有些程序只是进口,而不是汇编;这是否一个原因?)

EN

回答 1

Database Administration用户

发布于 2019-04-08 16:47:33

你的搜索必须更加复杂。存储的代码可以放在包标头中,而这并不是经常执行的。大多数情况下,它是在包体。如果您修改了查询以读取

代码语言:javascript
复制
SELECT DISTINCT name, type FROM all_source WHERE UPPER(text) 
LIKE UPPER(‘%string%’) and type ='PACKAGE BODY';

这给出了在包体中符合标准的所有代码。行号是您在全_来源中所能得到的全部信息。all_source中可用的字段为

代码语言:javascript
复制
OWNER VARCHAR2(30)     Owner of the object 
NAME  VARCHAR2(30)     Name of the object 
TYPE  VARCHAR2(12)     Type of object: FUNCTION, JAVA SOURCE, PACKAGE,PACKAGE BODY, PROCEDURE, TRIGGER, TYPE, TYPE BODY 
LINE  NUMBER           Line number of this line of source 
TEXT  VARCHAR2(4000)   Text source of the stored object 

当您搜索类型、过程或函数时,您将看到不属于包的独立代码块。

如果编码风格包括包体中的过程或函数中的本地过程或函数,则会很快变得复杂。您可以查找代码块之前的强制语法:过程xxx或函数xx is,以及结束它的代码;

所以你的搜索应该是:

  • 查找包或包主体中的所有过程或函数名以及行号。
  • 查找要查找的文本的行号。
  • 编写一些逻辑以查找包含文本的代码块的名称。

或者您可以使用GUI工具,比如TOAD或,它将为您完成此任务。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/234211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档