如何提取函数/过程中使用的所有 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 关键字的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Oracle 10G PL/SQL 函数和过程中查找所有表引用? [复制]
关于oracle 存储过程 如何切割一个字符串 转化为字符数组,然后遍历该数组: 类似ab,12;cd,55;k,7
求高手帮助,如何将EXCEL中包含某一关键词的所有行都提取出来,单独显示?