如何提取函数/过程中使用的所有 Oracle 关键字

Posted

技术标签:

【中文标题】如何提取函数/过程中使用的所有 Oracle 关键字【英文标题】:How to extract all Oracle Keywords used In a Function/Procedure 【发布时间】:2018-09-05 14:38:40 【问题描述】:

是否有任何简单的方法来获取函数/过程中使用的所有 Oracle 关键字?

让我印象深刻的第一件事是根据空间将文本从 user_source 拆分为给定对象名称,但这会留下一些未发现的场景,例如 DBMS_OUTPUT.PUT_LINE('HELLO WORLD') 等,

除了按空格、点、括号分割以外,有没有其他方法?

问候, 公斤

【问题讨论】:

比这还要复杂;在您的示例中,您将引用像“HELLO WORLD”这样的字符串 - HELLO 和/或 WORLD 可以是关键字,但如果它们是硬编码字符串的一部分,您不希望它们被视为“关键字”。然后 - 尽管这是一种非常糟糕的做法,但许多人使用关键字(如 DATE)作为列名。如果将它们用作列名,您不希望它们被拾取。还有很多类似的并发症。所以 - 退一步......为什么你需要这样做? 我同意并意识到这有多么复杂。开始这一切的主要原因是围绕代码开发某种安全性。虽然我们将完整的产品分享给客户,但代码应该是某种加密形式。所以,想知道是否可以开发这种类型的东西。找到了几个包装工具,但它们也可以很容易地打开。 【参考方案1】:

您可以使用内置的ALL_STATEMENTS/ALL_IDENTIFIERS

ALL_STATEMENTS 描述了存储的 PL/SQL 对象中可供用户访问的所有 SQL 语句。

还有The Power of Cloud PL/SQL:

要在代码库中收集有关 PL/SQL 标识符和 SQL 语句的信息,请在会话中执行以下语句

ALTER SESSION SET plscope_settings='identifiers:all, statements:all';
-- function/package compilation

SELECT st.owner,
       st.object_name,
       st.line,
       s.text
  FROM all_statements st join all_source s
    ON ( st.owner = s.owner
   AND st.object_name = s.name
   AND st.line = s.line )
 WHERE st.TYPE IN ('EXECUTE IMMEDIATE', 'OPEN')

【讨论】:

以上是关于如何提取函数/过程中使用的所有 Oracle 关键字的主要内容,如果未能解决你的问题,请参考以下文章

excel找到关键词后提取本行所有内容

如何从 Oracle 10G PL/SQL 函数和过程中查找所有表引用? [复制]

关于oracle 存储过程 如何切割一个字符串 转化为字符数组,然后遍历该数组: 类似ab,12;cd,55;k,7

求高手帮助,如何将EXCEL中包含某一关键词的所有行都提取出来,单独显示?

求oracle中的function的所有语法定义,以及注意事项!

Excel从如何右开始提取字符